シンプルなコレクションビューを追加し、バックエンドからフェッチしたアイテムを追加します。すべてのオブジェクトをnsmutablearrayに追加するとメモリが少なくなりますが、フェッチされたオブジェクトをNSObjectに追加するとコレクションビューでは、より多くのメモリが必要です。ここで メモリの問題nsobjectとnsmutablearray UICollectionView
サンプルコード
myObjectModel.hある
#import <Foundation/Foundation.h>
@interface myObjectModel: NSObject
@property (nonatomic, strong) NSString *objectTitle;
@property (nonatomic, strong) NSString *objectDesc;
@property (nonatomic, strong) NSString *objectImgURL;
- (id)initWithObjectTitle:(NSString *)dTitle
objectImgURL:(NSString *)dObjectImgURL
objectDesc:(NSString *)dObjectDesc;
@end
myObjectModel.m
#import "myObjectModel.h"
@implementation myObjectModel
- (id)initWithObjectTitle:(NSString *)dTitle
objectImgURL:(NSString *)dObjectImgURL
objectDesc:(NSString *)dObjectDesc {
self = [super init];
if (self) {
self.objectTitle = dTitle;
self.objectImgURL = dObjectImgURL;
self.objectDesc = dObjectDesc;
}
return self;
}
@end;
次いで
Iはcollectionviewの一方を有し、私のUIViewControllerにこのヘッダをインポートすべてのオブジェクトを取得するこのメソッドを追加してそれらのオブジェクトを追加するDその後、NSMutableArrayのここ
BackendlessDataQuery *query = [BackendlessDataQuery query];
query.queryOptions.pageSize = @(100); //set page size
[[backendless.persistenceService of:[Channels class]] find:query response:^(BackendlessCollection *backendlessObjects) {
NSArray *currentPage = [backendlessObjects getCurrentPage];
NSMutableArray *arrData = [[NSMutableArray alloc]init];
for (Objects *objects in currentPage) {
@autoreleasepool {
myObjectModel *dataItem = [[myObjectModel alloc]initWithObjectTitle:backendlessObjects.title
objectImgURL:backendlessObjects.image
objectDesc:backendlessObjects.Desc;
[arrData addObject:dataItem];
}
//Test is a nsarray added in the header file
self.test = arrData;
[self.collectionView reloadData];
} error:^(Fault *fault) {
}];
にそれらを保存すると、私はすべてのオブジェクトがcollectionviewに表示されます。このコードを実行したとき、私は私のコレクションのデータソース
#pragma mark - UICollectionViewDatasource
- (NSInteger)numberOfSectionsInCollectionView:(UICollectionView *)collectionView; {
return 1;
}
- (NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section{
return [test count];
}
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath{
myCollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"data" forIndexPath:indexPath];
myObjectModel *dataItem = (myObjectModel*)[test objectAtIndex:indexPath.row];
// cell.objectTitle.text = dataItem.objectTitle;
[cell.channelImg sd_setImageWithURL:[NSURL URLWithString:dataItem.objectImgURL] placeholderImage:[UIImage imageNamed:@"NoImage.png"]];
return cell;
}
に追加するものですが、スクロールしながらメモリを保持します増加する。
私はあなたの質問をしませんでした。 – Mohammadalijf
'collectionViewCells'を再利用していますか?あなたの 'collectionView'の' dataSource'を共有してください。 – Adeel
フェッチされた配列をCore Dataに配置しようとしていますか?その理由はNSObjectですか?助けを得るためにもっと明確にする。 –