objective-c - 使用访问器将属性设置为新分配的对象会导致内存泄漏

标签 objective-c memory-management memory-leaks

我只想确认以下是否会导致内存泄漏。

.h文件

@property (nonatomic, retain) MyObject *foo;

.m文件

@synthesize foo;
...

self.foo = [[MyObject alloc] init];

dealloc 设置为

[foo release];

我的理解是自动生成访问器方法的实现看起来像

-(void)setFoo:(MyObject *)newObject {
    if (foo != newObject) {
        [foo release];
        foo = [newObject retain];
    }
}

遍历 self.foo = [[MyObject alloc] init]; 现在对我来说,“分配了一个保留计数为 1 的新 MyObject 对象,将其传递给 setFoo :,foo 永远不会等于 myObject,因为它是新分配的,所以释放旧值,增加 newObject 的保留计数使其 2 并将其分配给 foo"

dealloc 释放 foo 因此将其保留计数设置为 1,这意味着该对象已泄漏?

为了安全地做到这一点,我们应该编写我们的代码

self.foo = [[[MyObject alloc] init] autorelease];

我的理解正确吗?

编辑

我意识到这个问题不太适合 SO,所以请随意指出一个更好的地方来问这类问题。

最佳答案

是的,那是绝对正确的。

关于objective-c - 使用访问器将属性设置为新分配的对象会导致内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6024579/

相关文章:

objective-c - UIImageView 的交互性

ios - 如何检测当前用于文本输入的自定义键盘(ios 8)

iOS7无法隐藏tabbar、黑条

Swift变量声明意义

c# - 具有 CancellationTokenSource 的 channel 在处理后出现超时内存泄漏

ios - 目标 - C : UITableView Content Changing on Scroll

c++ - 坚持理解内存对齐

c - 声明数组时出现段错误

c - 免费功能给出了错误

ios - 导航后自定义 UITableViewCell 未释放或重用,内存泄漏