【发布时间】:2013-04-16 07:16:56
【问题描述】:
问题 1
Place *place = [[[Place alloc] initwithCoordinate:location anotationType:CSMapAnnotationTypeStart] autorealease];
place.name = name;
place.description = description;
place.strUniqueIdentity = uniqueIdentity;
NSLog(@"Unique identity %@",uniqueIdentity);
PlaceMark *marker = [[PlaceMark alloc] initWithPlace:place annotationType:MapAnnotationTypePin];
return [marker autorelease];
当我分析 xcode 4.6.2 中的代码时,它在倒数第二行显示“对象已发送 -autorelease 太多次”。 我不明白为什么会这样显示。
问题 2:
return [[[OAProblem alloc] initWithResponseBody:response] autorelease];
在这一行中,它显示“存储在'self'中的对象的潜在泄漏”。
【问题讨论】:
-
你为什么不用
ARC? -
看起来是对的,您是否对类本身的内存管理进行了一些修改,例如 initWithCoordinate 或 initWithPlace。确定您显示的范围内没有其他内容吗?
-
@msgambel:我总是使用手动引用计数,因为它比某些人指定的 ARC 更好。
-
你的代码sn-p和抓屏不一样
-
@Yash:除非您手头有具体问题,否则绝对没有理由不使用 ARC(您始终可以在 ARC 项目中将特定有问题的文件标记为 MRC)。 ARC 编译为 MRC。 Clang 将高度复杂的算法应用于您的代码库,以便找出最佳插入
retain/release的位置,省略所有不必要的(因此导致更快的代码)。现在你的决定似乎是基于纯粹的猜测和传闻。 ARC 随时为您提供帮助。用它。 (此外,ARC 强制执行严格的方法命名约定,这也是一件好事。)
标签: iphone ios objective-c ipad xcode4