2012-05-05 241 views
3

可能重复:
difference between accessing a property via “propertyname” versus “self.propertyname” in objective-c?什么是self.property的使用和性能之间的差异

在我的课,我不知道是否使用的财产self.property,如

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

他们都好像工作正常。这两种用法有什么区别吗?我很困惑。

+1

可能重复[http://stackoverflow.com/questions/5251600/difference-between-accessing- a property-via-propertyname-versus-self-property](http://stackoverflow.com/questions/5251600/difference-between-accessing-a-property-via-propertyname-versus-self-property) –

+0

Thx,其实我还有财产和_property之间的混淆,可以帮我解决这个问题吗? –

回答

3

属性是inface你的方法getter和setter,当过您通过self.dateformator称呼它,它会调用属性,如果你已合成的对象和自我生成getter和setter命名(的setProperty和getProperty),

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

现在你的问题有什么不同,

区别在于,在iVar访问(您的第一行),y您将不得不手动释放该对象,并且将保留计数1增加,并且分配的内存将与其相关联。而在self.property中,会分配一个内存,但是当苹果属性管理执行此操作时,将为该变量分配一个新块。但保留数将再次相同。

所以一块内存将会丢失。

现在我想告诉一些有益的事情,那就是为对象使用属性,因为如果你在接口文件中的属性属性中写入了保留,那么你的内存管理将在compileres结束,但请记住使用dealloc方法编写发行版。为此,你必须writter这里行代码,就像

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

使用它作为

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

您的保留计数将是一样的,你想要的那一个,而don'd关怀在哪里释放它,如果你写了它,它会在dealloc方法中自动释放。

和前面写一个,你必须保持跟踪,你必须释放对象

+0

thx为你的答案,真的很有帮助! –

+0

u'r欢迎您亲爱的 – Saad

+0

然而,自从ARC,自动引用计数,自XCode 4.2以来,你不必担心释放你的对象了;) – iJatrat

2

如果你想使用它的setter和getter函数,你实际上可以使用self.property。这是属性的主要功能,它们为您提供了setter和getter方法,而无需您自己编写代码。现在,如果你离开了自己。并只使用你的属性,那么你没有访问任何它的getter或者setter方法。但在你的情况下,这并不重要,因为分配和初始化一个对象并没有使用steer或getter方法。这就是为什么这两种方式都适合你。

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

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

相关问题