バックグラウンド操作を実行するために何を使用していますか?
NSOperation をサブクラス化し、NSOperationQueue を使用して実行することで、バックグラウンド操作を簡素化できます。NSOperationQueue を解放するだけで、iOS が自動的にクリーンアップします。
https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html
https://developer.apple.com/library/ios/#documentation/Cocoa/Reference/NSOperationQueue_class/Reference/Reference.html
ここに例があります。
@interface MyBackgroundOperation : NSOperation
@end
@implementation MyBackgroundOperation
- (id)init
{
self = [super init];
if(self != nil)
{
// stuff that needs to be done at init
}
return self;
}
- (void)main
{
@try
{
// run my background operations
}
@catch (NSException *e)
{
// catch the exception
}
}
- (void)dealloc
{
// clean up
[super dealloc];
}
@end
次に、このように操作を開始します
NSOperationQueue *operationQueue = [[NSOperationQueue alloc] init];
MyBackgroundOperation *myOperation = [[MyBackgroundOperation alloc] init];
[operationQueue addOperation:myOperation];
[myOperation release];
[operationQueue release];
OS は、View Controller を解放しても影響を受けないように、操作が完了するまで操作を保持します。ただし、すでに開始されている操作を停止したい場合は、通知や KVO など、もう少し高度な手法を使用する必要があります。