在我的课堂上,我不确定是否使用属性的self.property,例如
dateFormatter = [[NSDateFormatter alloc] init];
//or
self.dateFormatter = [[NSDateFormatter alloc] init];
他们似乎都很好。这两种用法之间有什么区别吗?我很困惑。
答案 0 :(得分:3)
属性是你的方法getter和setter的inface,当你通过self.dateformator调用它时,如果你已经合成了对象并且自己生成了getter和setter命名(setProperty和getProperty),它将调用该属性,
在你的情况下,你的第一行不是属于你的,你正在使用属性getter和setter方法在代码的第二行直接访问你的类的iVar,
现在你的问题有什么不同,
不同之处在于,在iVar访问(您的第一行)中,您必须手动释放该对象,并且将保留计数增加1,并且将分配的内存与其相关联。而在self.property中,会分配一个内存,但是当apple属性管理执行此操作时,将为该变量分配一个新块。但保留计数将再次相同。
因此会丢失一块内存。
现在我想告诉一些有益的事情,好的方法是使用对象的属性,因为如果你在接口文件的属性属性中写了retain,那么你的内存管理将在compileres结束,但是记得用dealloc方法写一个release。对于你在这里写的代码行,比如
self.someProperty = [[NSArray alloc] init];
将其用作
NSArray* arr = [[NSArray alloc] init];
self.someProperty = arr;
[arr release];
现在你的保留计数与你想要的保持计数相同,并且不知道在哪里释放它,如果你写它,它将在dealloc方法中自动释放。
对于你之前写的那个,你必须跟踪你必须释放对象的位置
答案 1 :(得分:2)
如果要使用其setter和getter函数,实际上可以使用 self.property 。这是属性的主要功能,它们为您制作setter和getter方法,而无需您自己编写代码。现在,如果你离开sel。并且只使用属性,然后您不会访问任何getter oder setter方法。但是在你的情况下这并不重要,因为分配和初始化一个对象没有使用steer或getter方法。这就是为什么两种方式都适合你。
' self.property '访问该属性的setter和getter方法。
' property '访问属性的实例变量。