【发布时间】:2012-07-21 15:28:46
【问题描述】:
我正在获取联系方式,但我的 shouldContinueAfterSelectingPerson 方法存在内存问题。我在几周前遵循了一个教程,但是现在当我单击产品-> 分析时,我在这 3 行上得到“在线分配的对象的潜在泄漏”:
[lastName setText:(__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty)];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateOfBirth setText:birthday];
当我点击这些错误时(虽然第三行只有 2 号):
调用函数 'ABRecordCopyValue' 会返回一个具有 + 1 保留计数的 Core Foundation 对象
对象泄露:分配的对象在此执行路径的后面没有被引用,并且保留计数为 + 1
完整代码如下:
- (BOOL)peoplePickerNavigationController: (ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person {
[firstName setText:(__bridge NSString *)ABRecordCopyValue(person, kABPersonFirstNameProperty)];
[lastName setText:(__bridge NSString *)ABRecordCopyValue(person, kABPersonLastNameProperty)];
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"MMMM d, yyyy"];
birthday = [dateFormatter stringFromDate:(__bridge NSDate *)ABRecordCopyValue(person, kABPersonBirthdayProperty)];
[dateOfBirth setText:birthday];
是否有解决此问题的方法?我修复它有多重要?我的代码中还有另一个潜在的对象泄漏。
最后一点:我正在使用 ARC。
【问题讨论】:
-
你发布过 dateFormatter 吗?
-
@trumpetlicks 我正在使用 ARC,所以我无法发布任何内容。把 dateFormatter = nil;使用后也没有删除警告
-
变量“生日”是怎么来的,你在哪里声明它,等等...?
-
名字、姓氏和生日都是我在 .m 文件顶部的所有 (at)synthesise 属性下声明的 NSString。然后我尝试用(at)属性(非原子,保留)将它们放入.h,但没有任何区别。