拡張するView Controllerを使用するアプリケーションがNetworkPhotoAlbumViewController
あり、次に拡張しますNIToolbarPhotoViewController
NIPhotoAlbumScrollViewDataSource
基本的に、 NIPhotoScrubberViewDataSource
、NIOperationDelegate
、などのすべての NI プロトコルを実装し NIPhotoAlbumScrollViewDelegate
、唯一のカスタマイズはdidReceiveMemoryWarning
:
- (void) didReceiveMemoryWarning {
NSLog(@"Nimbus Photo Album memory warning");
[self.highQualityImageCache reduceMemoryUsage];
[self.thumbnailImageCache reduceMemoryUsage];
NSLog(@"Nimbus Photo Album end 0memory warning");
}
同時ダウンロード数をaddOperation
減らすには:
-(void) addOperation: (AFImageRequestOperation *) operation {
NSLog(@"operation queue size is %d", _queue.operationCount);
BOOL found = NO;
for (AFImageRequestOperation *op in _queue.operations) {
if(!operation.isCancelled && [[operation.request.URL absoluteString] compare:[op.request.URL absoluteString]] == NSOrderedSame) {
NSLog(@"found the same operation");
found = YES;
break;
}
}
if(found) return;
NSInteger cancelledCount = 0;
if (_queue.operationCount > 5) {
for (NSOperation *operation in _queue.operations) {
if (operation.isCancelled) {
cancelledCount ++;
}
}
}
NSLog(@"cancelled operation count is %d", cancelledCount);
NSInteger count = _queue.operationCount;
if(count - cancelledCount > 5) {
for (NSOperation *operation in _queue.operations) {
if(!operation.isCancelled) {
NSLog(@"cancel operation");
[operation cancel];
break;
}
}
}
NSLog(@"operation is added into queue");
[_queue addOperation:operation];
}
このアプリケーションはまた、AVFoundation を使用して写真をキャプチャし、フル解像度でサーバーに送信します (後でネットワーク アルバムにロードします)。
問題は、使用してから写真キャプチャに切り替えると、とが呼び出されたNetworkPhotoAlbumViewController
としても、メモリ不足 (アプリのメモリが 20 ~ 30 MB に達する可能性がある) が原因でアプリケーションがクラッシュすることが非常に多いことです。didReceiveMemoryWarning
reduceMemoryUsage
何か間違ったことをしていて、メモリが正しくクリアされていない可能性はありますか? 問題の原因はAFNetworking
? Web からいくつかの画像をダウンロードし、サムネイルの読み込みとパンとズームを使用してフォト アルバムに表示する代わりに、どのような方法がありますか?