objective-c - iOS:属性——分配和释放对象

标签 objective-c ios memory-management memory-leaks properties

我在 iOS (4) 中苦苦挣扎,在一个作用域中分配对象并在另一个作用域中释放它。我使用属性作为对象的指针。该对象在一个实例类方法中分配和初始化,然后在类的 dealloc 方法中释放它。这些属性是用保留声明的。除了使用这样的属性时遇到问题之外,我还发现分配和初始化对象以及设置属性很麻烦。

NSObject *object = [[NSObject alloc] init];
Self.myProperty = object;
[object release];

我试过了

self.myObject = [[NSObject alloc] init];

但是这给了我内存泄漏。

我的问题:我必须制作这个临时对象还是有更优雅的方法来做到这一点?

后续问题:我是否必须将属性设置为 nil 并释放自动生成的 ivar?

[self setMyProperty:nil], [myProperty release];

当 XCode 4 为您生成属性 stub 时,它会将 [self setMyProperty:nil] 放入 viewDidUnload 中,将 [_myProperty release] 放入 dealloc 中。

最佳答案

第一个问题:

autorelease 是你的 friend :

self.myObject = [[[NSObject alloc] init] autorelease];

第二个问题:

不,这是多余的,但无害,因为第二个操作不会执行任何操作([nil release] 是安全的)。 我建议使用 self.XXX = nil; 构造,因为它更安全且非常清晰/可读。

关于objective-c - iOS:属性——分配和释放对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6294245/

相关文章:

java - JVM 中的内存分配

iphone - 为什么要在 init 方法中调用 autorelease 来定义 iVar?

objective-c - 在返回可变对象之前将可变对象转换为不可变对象(immutable对象)是否重要/好?

iphone - iOS 中如何检测铃声开关状态?

ios - 无法使用 Xcode 存档(错误 - PhaseScriptExecution 失败,退出代码非零),但构建成功

sql-server - SQL CLR 中的内存压力通知

python - 从 SWIG 类型映射中释放内存

ios - 将 obj-c 代码转换为 swift 2 block 问题

ios - 无法更改 watchOS 2 中动画动态图像的持续时间

ios - NSUserDefaults 加载问题