正如Richard指出的那樣,缺少大括號將var定義爲全局變量。在聲明實例變量方面,有幾種方法:
在Objective-C Programming Language中討論了在@interface
或@implementation
中聲明實例變量。
所以,你可以在@interface
,這是你在歷史上將會看到的實例變量定義的最常見的地方定義一個實例變量x
:
@interface TestClass : NSObject
{
NSInteger x;
}
@end
@implementation TestClass
// define the methods
@end
正如上面的鏈接描述,但是,你也可以在@implementation
定義它(雖然,因爲習慣問題,我不認爲你會看到這個非常頻繁):
@interface TestClass : NSObject
@end
@implementation TestClass
{
NSInteger x;
}
// define the methods
@end
其實是有,你可以把你的實例變量一個第三名,在課程擴展中(稍後在same document中討論)。在實踐中,這意味着你可以有你的.h定義如下
// TestClass.h
@interface TestClass : NSObject
// define public properties and methods here
@end
和您的m如下:
// TestClass.m
// this is the class extension
@interface TestClass()
{
NSInteger x;
}
@end
// this is the implementation
@implementation TestClass
// define the methods
@end
這最後一種方法(與@interface
一.H,用類.M擴展名和@implementation
)現在是Xcode模板在創建新類時使用的格式。實際上,這意味着您可以將公共聲明放在.h文件中,並將您的私有@property
和實例變量放入類擴展中。它只是讓你的代碼更清潔一些,使你不需要使用私有實現細節來混淆你的.h文件(這實際上就是你的類的公共接口)。例如變量,或許在@implementation
中定義實例變量的先前技術是等價的,但我認爲它不適用於@property
聲明,在這種情況下,類擴展會變得有用。
來源
2012-08-12 07:23:43
Rob
Objective-C沒有成員變量;它有實例變量。或多或少都是一樣的,但命名的一致性有所幫助。 – bbum 2012-08-12 06:05:52