我有一个关于 xcode ARC 的初学者问题。以下代码在没有内存问题的情况下工作,因为内存由 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 被计算一次,但在方法退出时超出了范围。testData 是另一个计数,但在循环的下一次迭代中 testData 应该没有计数,并被系统释放。