7
聲明變量,我看到一本書展示這個代碼的例子:在@implementation
@implementation ViewController
{
NSString *name;
}
爲什麼不@interface
申報呢?在@implementation
中聲明變量有什麼區別,而不是@interface
?爲什麼要在此範圍內聲明NSString
?
聲明變量,我看到一本書展示這個代碼的例子:在@implementation
@implementation ViewController
{
NSString *name;
}
爲什麼不@interface
申報呢?在@implementation
中聲明變量有什麼區別,而不是@interface
?爲什麼要在此範圍內聲明NSString
?
在@implementation
部分聲明ivars的優點是更好的封裝。這樣,ivars不必出現在.h
文件中,因此對於只能看到頭文件的類的外部用戶不可見。這更好地隱藏了課程的內部實現。
一般來說,現在的屬性可以有自動合成實例變量和其他高德可以直接宣佈在@implementation
塊,我看不出有什麼理由你應該都在你的@interface
(向後兼容性分開)申報的高德。
爲什麼要聲明這個NSString在一個範圍內?
因爲這是聲明實例變量的唯一方法。否則,你會聲明一個變量,它可以從同一個文件中的任何地方訪問(參見他的評論中鏈接到的BoltClock問題)。
所以,如果我聲明NSString超出範圍,它會成爲一個全局變量?我的意思是任何外部類可以訪問變量? –
排序;看到一些想法是愚蠢的,因爲它涵蓋了ivars和全局/靜態之間的區別。請注意,'@ implementation'中的ivar聲明是相對較新的 - 由於編譯器生成的類的方式,它在32位Mac OS X運行時中不可行。一旦「脆弱的基類」問題得到解決,就有可能在主''interface'之外進行自動合成和/或聲明ivars。 – bbum