self.property 和 property 的使用有什么不同?

3

1
可能重复 https://dev59.com/LlXTa4cB1Zd3GeqPyBCA - Malek_Jundi
谢谢,实际上我还有一个关于属性和 _property 的疑问,你能帮我解答一下吗? - lu yuan
2个回答

3

属性实际上是您的方法getter和setter,每当您通过self.dateformator调用它时,如果您已经合成了对象并自动生成了getter和setter命名(setProperty和getProperty),它将调用该属性。

在您的情况下,您的第一行不是属性,而是直接访问类的iVar,而在代码的第二行中,您正在使用属性getter和setter方法。

现在您的问题是什么区别,

区别在于在iVar访问(您的第一行)中,您必须手动释放对象,并且保留计数会增加1,并且分配的内存将与其相关联。而在self.property中,分配了一个内存,但是新块将被分配给变量作为苹果属性管理这样做。但保留计数将再次相同。

因此,将丢失一块内存。

现在我想告诉一些有益的事情,即对于对象最好使用属性,因为如果您在interface文件中编写了retain,则您的内存管理将在编译器端处理,但请记住在dealloc方法中编写release。对于您在此处编写的代码行,例如

self.someProperty = [[NSArray alloc] init];

使用它作为

NSArray* arr = [[NSArray alloc] init];
 self.someProperty = arr;
 [arr release];

现在你的保留计数将与你想要的一样,并且不用担心在哪里释放它,如果你已经编写了dealloc方法,它会自动释放。

而对于之前编写的代码,你需要跟踪对象需要在哪里被释放。


然而,自从XCode 4.2以来,有了ARC(自动引用计数),你不再需要担心释放对象的问题了 ;) - rajomato
是的,这是一个不错的步骤,但我认为在开始的第一年里,你不应该使用ARC,只是为了了解内存管理。 - Saad

2
如果你想使用setter和getter函数,实际上可以使用self.property。这就是属性的主要功能,它们为你创建setter和getter方法,而无需自己编写代码。现在如果你省略sel.而只使用property,则不会访问任何getter或setter方法。但在你的情况下,这并不重要,因为分配和初始化对象不需要使用getter或setter方法。这就是为什么两种方法都适用于你的原因。
"self.property"访问属性的setter和getter方法。 "property"访问属性的实例变量。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接