将 self 与实例一起用于分配和释放 [重复]
Posted
技术标签:
【中文标题】将 self 与实例一起用于分配和释放 [重复]【英文标题】:Use of self with an instance for alloc and release [duplicate] 【发布时间】: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 发布];
所以任何人都可以消除我对此的怀疑。提前致谢。
【问题讨论】:
【参考方案1】:您可以通过这篇文章了解您正在寻找的概念:
Objective-C Difference between setting nil and releasing
【讨论】:
【参考方案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。
【讨论】:
以上是关于将 self 与实例一起用于分配和释放 [重复]的主要内容,如果未能解决你的问题,请参考以下文章