xcodeARCについて初心者の質問があります。次のコードは、メモリがARCによって解放されるため、メモリの問題なしで機能します。
- (void)viewDidLoad
{
[super viewDidLoad];
// test nsmutabledata
dispatch_queue_t testQueue = dispatch_queue_create("testQueue", NULL);
dispatch_async(testQueue, ^{
while (1) {
NSMutableData *testData = [[NSMutableData alloc]initWithCapacity:1024*1024*5];
NSLog(@"testData size: %d", testData.length);
}
});
}
ただし、以下はそうではなく、数秒後にメモリ割り当てエラーが発生します。
+ (NSMutableData *) testDataMethod
{
NSMutableData *testDataLocal = [[NSMutableData alloc]initWithCapacity:1024*1024*5];
return testDataLocal;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// test nsmutabledata
dispatch_queue_t testQueue = dispatch_queue_create("testQueue", NULL);
dispatch_async(testQueue, ^{
while (1) {
NSMutableData *testData = [RootViewController testDataMethod];
NSLog(@"testData size: %d", testData.length);
}
});
}
ARCについて間違った理解がありますか?testDataLocalは1回カウントされますが、メソッドが終了するとスコープから外れます。testDataは別のカウントですが、ループの次の反復では、testDataはカウントを持たず、システムによって解放されます。