objective-c - Objective C self.variable 和变量赋值之间的区别

标签 objective-c memory-leaks setter

我担心我是愚蠢的。

我花了大约三个小时来追踪一个内存泄漏,它一直在摧毁我的理智,在注释掉我的一半应用程序后,我得出了以下结论。

在正确的位置给出以下内容。

NSString *blah;

@property (nonatomic, retain) NSString *blah;

@synthesize blah;

-(id)initWithBlah:(NSString*)b {

     self.blah = b;    //this leaks
     blah = b;         //this does not

}

我对 objectice c 并不是特别有经验,我知道如果我在类之外调用 object.blah = b;我将透明地调用一个将保留 b 的 setter 函数。在函数内部,我假设通过使用 self.blah = b 设置它,我出于某种原因进行了双重保留?

有人可以向我解释为什么会这样吗?或者如果不是我可能做错了什么?

干杯

最佳答案

blah = b

直接修改类实例变量。

self.blah = b

将调用访问器(如果存在) - 从而根据需要保留、释放资源。

您应该将 [blah release]; 添加到您的 dealloc 方法中,以便在您的类被释放时释放资源。

关于objective-c - Objective C self.variable 和变量赋值之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3088680/

相关文章:

ios - 如何摆脱 XCode 中透明对象周围的蓝色边框

objective-c - Objective-C:尝试在UIScrollView中实现自己的拖动,遇到了很多问题

c++ - 监视 C++ OpenFrameworks 应用程序,是否有卡住或内存泄漏,然后强制退出并重新启动?

objective-c - 选择器 OpenDevice 的未知类方法

ios - 等待完成 block 会导致泄漏吗?

java - Android 内存泄漏管理显示 "Don use non-static inner classes"但这会带来副作用

objective-c - 从 Objective-C 中的 Core Data 元素获取和设置值?

PHP 以数组作为名称设置魔术方法

java - 设置方法或构造函数

iphone - 从 iPhone 的 TableView 中保存选定的行数据