【问题标题】:Use of self with an instance for alloc and release [duplicate]将 self 与实例一起用于分配和释放 [重复]
【发布时间】:2012-02-10 06:59:45
【问题描述】:
可能重复:
Why shouldn’t I use the getter to release a property in objective-c?
我对 alloc 和 self 的释放有点困惑。在查看了几个帖子和教程之后,似乎需要更多建议。以下是问题列表:
- 这是分配和释放的正确方法吗?
self.selectPopover = [[UIPopoverController alloc] init];
[self.selectPopover 发布];
- 试图从另一个类执行此代码。 classArr 在 ObjClass 中定义。当我分析此代码潜在泄漏时,发生“调用者此时不拥有的对象的引用计数不正确递减”。
ObjClass.classArr = [[NSMutableArray alloc]init];
[ObjClass.classArr 发布];
所以任何人都可以消除我对此的怀疑。提前致谢。
【问题讨论】:
标签:
iphone
ios
xcode
memory-management
【解决方案2】:
我假设您已将属性创建为retain
当你
ObjClass.classArr = [[NSMutableArray alloc] init];
此时,retainCount 变为两个,一个是因为alloc,另一个是通过retain 类型的属性分配它
当你 [ObjClass.classArr release]; 这个时候你发送一个版本并且 reatinCount 从 2 变为 1。
所以要么你这样做
ObjClass.classArr = [[NSMutableArray alloc]init];
[ObjClass.classArr release];
这使得它的保留计数为一
或者你可以这样做,这是实际发生的情况
classArr = [[NSMutableArray alloc] init];
分配没有使retainCount 为一的属性的ivar。