2012-05-05 113 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方法。

'屬性'訪問屬性的實例變量。

相關問題