何时在iphone中使用self和实例变量赋值

时间:2010-08-26 07:07:17

标签: iphone

我对在ivars分配期间何时使用self关键字感到困惑,当我尝试将某些值分配给ivar或仅在我尝试访问ivar时,是否应该使用它?

此外,如果我在不使用self的情况下在ivar上执行retainCount,它会打印一个计数为1,假设它已经是alloc&在里面。但如果我使用self,它会保留2个。

示例代码:

标题= [[NSMutableDictionary alloc] init];

NSLog(@“转让前的标题:%d”,[标题retainCount]); //打印1

标题=另一个字典; NSLog(@“赋值后的标题:%d”,[标题retainCount]); //打印1

self.Titles = anotherDictionary; NSLog(@“赋值后的标题:%d”,[标题retainCount]); // print 2

我不应该在转让期间使用自己或何时使用?任何帮助都会非常感激,因为这种情况让我很怀疑我的伊娃没有以正确的方式释放。

谢谢, 穆赫辛

编辑:我对上面的问题有另一个相关问题,我应该使用self来分配单例类属性吗?

2 个答案:

答案 0 :(得分:1)

当您使用标题= ... 时,您将直接分配给变量。当您使用 self.Titles = ... 时,您实际上正在使用动态生成的setter方法。

顺便说一句,我认为推荐的做法是属性以小写字母开头。

对属性及其访问方式进行一些阅读。

答案 1 :(得分:0)

您不使用self来分配ivars或读取它们。您可以使用它来读/写属性,即调用方法/发送消息。

所以在你的例子中:

Titles = anotherDictionary;

期间指定了ivar而没有调用setter
self.Titles = anotherDictionary;

实际上是

[self setTitles:anotherDictionary];

这通常由@syntetize标题自动生成。 当@property具有retain标志时,setter的代码会自动保留对象。

推荐做法: 一旦拥有了负责内存管理的属性,就应该使用它们。而不是手动重置/释放对象。

Here is the apple's guide I was learning from.

<强>更新

关于内存管理,只需检查苹果的memory management programming guide它会回答您在评论中提出的问题。它通过示例显示了如何使用属性提供的内存管理。