lem*_*mta 5 iphone memory-leaks memory-management objective-c
我有一个问题让人头疼,我只是创建方法:
-(void) main{
for (int i = 0; i< 100;i++) {
[self getPhoneOfContact:i];
}
}
-(void)getPhoneOfContact:(NSInteger)id_contact {
ABRecordRef record = ABAddressBookGetPersonWithRecordID(addressBook,id_contact);
CFTypeRef ref1;
ref1 = ABRecordCopyValue(record,kABPersonPhoneProperty);
CFRelease(record);
CFRelease(ref1);
}
Run Code Online (Sandbox Code Playgroud)
我认为内存将近似常数,因为我已经复制了释放内存,但实际上它仍然会增加每个循环i; 谁能解释一下这个:(谢谢!
你的代码错了.ABAddressBookGetPersonWithRecordID调用遵循Core Foundation的"获取规则".这意味着您没有返回值的所有权,因此您不必释放它.
请参阅核心基础 - 内存管理
ABAddressBookGetPersonWithRecordID运行和/或使用一些您不知道的自动释放对象可能ABRecordCopyValue会导致内存增加。不过,当最近的自动释放池耗尽时,它将被释放。这不是您的应用程序的问题。
尝试将循环放入其自己的自动释放池中,并在执行循环后耗尽该池:
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
// do computation
[pool release];
Run Code Online (Sandbox Code Playgroud)
这会将内存“重置”到初始数量吗?
另外,一般来说,尝试使用 XCode 的 Instruments Memory Leaks,而不是查看内存使用情况 - 这只会有帮助,但Memory Leaks是查找内存泄漏的主要工具,好吧.. :)
| 归档时间: |
|
| 查看次数: |
3196 次 |
| 最近记录: |