将 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 与实例一起用于分配和释放 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

是否需要删除以释放内存[重复]

垃圾回收机制

ZFS磁盘空间管理(分配释放原理)

什么时候在 Excel XLL 中释放 FP * 是安全的?

ZFS空间管理(分配释放原理)

将 fetch 与变量一起使用 [重复]