Objective-C的新手,我基本上来自c ++背景。我现在正在学习objective-c,并希望确认我所理解的是写或错?请建议。
我有以下课程:
@interface Test: NSObject
{
int instance1;
}
@property int instance1;
- (void) sayHello;
@end
Class'Test'有一个实例变量instance1
。如果成员函数ie:sayHello想要访问变量,则必须通过getter / setter函数进行。所以,有两种方法可以实现它:
所以,Untimately,getter / setter是在方法实现中访问变量的唯一方法,即。 self.instance1 = 100;
和instance1 = 100
都需要getter / setter。
错过了1.和2.,无法访问instance1
变量。
此外,instance1
是一个公共变量,可以使用对象实例在类外部访问。
Test *t = [[ Test alloc] init];
t.instance1 = 200;
问题:
instance1
为“私有”,这样我就无法访问该实例
课外变量?答案 0 :(得分:1)
如果成员函数ie:sayHello想要访问变量,则必须通过getter / setter函数进行。
它没有have to
。您可以直接访问ivars,而无需使用访问器方法:
- (void)sayHello {
instance1 = 123;
}
您可以通过在实现文件中声明私有ivars来定义它们,而不是标题:
@implementation Test {
int privateVar;
}
// ... additional implementation, methods etc.
@end
请注意,自Xcode 4.4起,您不必再声明您的ivars了。您只需声明一个属性。 ivar和accessor方法将自动合成。
有关详细信息,建议您阅读我对此问题的回答: Declaration of variables
答案 1 :(得分:1)
离子SomeDelegate.h
@interface SomeDelegate : NSWindowController {
@private
int fLanguage;
int fDBID;
bool fEndEditingIsReturn;
@public
int fIsMyLastMSG;
}
@property int language;
在SomeDelegate.mm
@implementation SomeDelegate
@synthesize language=fLanguage;
在我的示例中,您获得了私有和公共变量,私有变量fLanguage
有一个property
< em>合成访问器方法。