2009-11-06 75 views
2

的Objective-C的成員initializiation嘿,所以如果我有一個像自動釋放對象

@interface MyClass { 
    NSArray* myArray; 
} 
@end 

@property (retain, nonatomic) NSArray* myArray; 

一些財產在我的init方法應該怎麼做類似

myArray = [[NSArray array] retain]; 

或者

self.myArray = [NSArray array]; 

我會認爲前者會更受歡迎,因爲它更清楚發生了什麼事情?我想另一種說法是,你應該在實現中與成員的屬性交互還是嚴格使用成員本身?

回答

8

第一個是首選,因爲如果您通過訪問器,它可以觸發KVO通知,如果您的子類爲對象,則可能會引發奇怪的問題。

1

除了維護OOP範例外,setter的一個重點是正確釋放以前保留的值。由於你是在初始階段,通常假設沒有任何價值是安全的,所以在使用setter的時候你並沒有真正獲得任何東西。