2012-08-25 36 views
0

最近我開始學習Objective-C,並且對成員變量和屬性感到困惑。我想知道什麼是以下三個代碼塊之間的區別:objective-c成員變量和屬性語句的用法

1.

@interface Application 
{ 
    UserInfo* userInfo; 

    ApplicationInfo*applicationInfo; 
} 

@property (retain) UserInfo*userInfo; // @synthesize userInfo; 

@property (retain) ApplicationInfo* applicationInfo ; // @synthesize applicationInfo; 

@end 

2.

@interface Application 

{ 
} 

@property (retain) UserInfo*userInfo; // @synthesize userInfo; 

@property (retain) ApplicationInfo* applicationInfo ; // @synthesize applicationInfo; 

@end 

3.

@interface Application 
{ 
    UserInfo* userInfo; 

    ApplicationInfo*applicationInfo; 
} 

@end 

非常感謝您!

回答

0

1:這將聲明帶有伴隨聲明屬性的實例變量。當你合成的屬性,例如其中提到的實例變量(由於具有相同的名稱)的屬性foo,則foosetFoo方法是自動生成的,這些都是當您使用點表示法(如someInstance.foo = bar)訪問稱爲他們。因爲您將屬性定義爲retain,所以當您使用setter或點表示法將對象分配給屬性時,實例變量所指向的現有對象將被釋放,並且新對象將被分配給實例變量並被保留。

2:與1完全相同。隱含實例變量。

3:實例變量是有,但性質都沒有,所以你將不能夠通過點符號和無getter/setter方法合成來訪問它們。

我強烈建議閱讀本作的官方文檔,它很清楚,奠定了這一切在一個相當簡單的方式。

+0

非常感謝@Jim – Bohan