self.property和property的用法有什么区别



可能的重复项:
在 Objective-C 中通过"propertyname"访问属性与"self.propertyname"之间的区别?

在我的课堂上,我不确定是否使用属性的self.property,例如

  dateFormatter = [[NSDateFormatter alloc] init];
  //or
  self.dateFormatter = [[NSDateFormatter alloc] init];

它们似乎都工作正常。这两种用法有什么区别吗?我很困惑。

属性是面向你的方法getter和setter,当你通过self.dateformator调用它时,如果你已经合成了对象和自生成的getter和setter命名(setProperty和getProperty(,它将调用该属性,

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

现在你的问题有什么区别,

不同之处在于,在 iVar 访问(您的第一行(中,您必须手动释放对象,并且保留计数将增加 1,并且分配的内存将适应它。 在 self.property 中,会分配一个内存,但是当 Apple 属性管理执行此操作时,将为变量分配一个新块。 但保留计数将再次相同。

所以一个内存块将丢失。

现在我想告诉一些有益的事情,即对对象使用属性是一种好方法,因为如果您在接口文件的属性属性中写入了 keep,那么您的内存管理将在编译器端进行,但请记住在 dealloc 方法中编写 release。 对于您在此处有写入器的代码行, 喜欢

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

将其用作

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

现在,您的保留计数将与您想要的相同,并且不在乎在哪里发布它,如果您编写它,它将在 Dealloc 方法中自动释放。

对于您之前编写的那个,您必须跟踪必须释放对象的位置

如果你想使用它的setter和getter函数,你实际上可以使用self.property。这是属性的主要功能,它们为您制作 setter 和 getter 方法,而无需您自己编写代码。现在,如果您放弃 sel. 而只使用您的属性,那么您将无法访问它的任何 getter oder setter 方法。但这在您的情况下并不重要,因为分配和初始化对象不会使用 ssteering 或 getter 方法。这就是为什么这两种方式都对你有用。

'self.property' 访问属性的 setter 和 getter 方法。

"属性"访问属性的实例变量。

最新更新