2013-07-30 70 views
3

請告訴我這兩者之間的區別:在您的接口中聲明變量聲明在Objective-C - 接口VS實現

@interface MyClass() 
{ 
    BOOL newUser; 
} 

或者

@implementation MyClass 
{ 
BOOL newUser; 
} 

@end 
+1

在第二種情況下,即使實例變量的存在,該類的用戶也不會知道該實例變量的存在,只有該類本身。但是,在第一種情況下,使用類聲明導入頭文件的人將知道有一些實例變量名爲this,即使它們聲明爲「@ private」,「@ protected」或「@ package」。 – 2013-07-30 20:23:45

+0

@ H2CO3第一個是類擴展(很可能是.m,而不是.h)。 – rmaddy

+0

@rmaddy確切(但是,術語不是我的主要觀點)。 – 2013-07-30 20:26:52

回答

1

變量,如1,在其他可見實例化MyClass的對象的類。 2.中聲明的變量只能在MyClass中可見。 這裏你應該看到: http://developer.apple.com/library/ios/#referencelibrary/GettingStarted/Learning_Objective-C_A_Primer/

編輯:@JoshCaswell是正確的。 1.是一個匿名類別。根據聲明接口的位置可以看到它的變量。一個更好的閱讀鏈接的鏈接是: http://developer.apple.com/library/ios/#documentation/cocoa/conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html

+1

第一個聲明是在類擴展中,它可能不是(通常不是)在公共頭文件中。而且,在擴展中聲明的變量默認是私有的,而不是'@ protected'。 –