Iphone ViewController=\u ViewController含义
可能重复:Iphone ViewController=\u ViewController含义,iphone,objective-c,xcode,Iphone,Objective C,Xcode,可能重复: 我刚开始iphone应用程序开发,注意到当您生成一个新项目时,可以在AppDelegate.m中看到以下代码 @synthesize window = _window; @synthesize viewController = _viewController; 在AppDelegate.h文件中 @property (strong, nonatomic) UIWindow window; @property (strong, nonatomic) ViewController c
我刚开始iphone应用程序开发,注意到当您生成一个新项目时,可以在AppDelegate.m中看到以下代码
@synthesize window = _window;
@synthesize viewController = _viewController;
在AppDelegate.h文件中
@property (strong, nonatomic) UIWindow window;
@property (strong, nonatomic) ViewController controller;
我只想知道这到底意味着什么,特别是合成部分。它是
实例化局部私有变量?如果是这样的话,这与说
@综合视图控制器
谢谢模式
@synthesis foo=bar
允许您定义keyfoo
的属性,该属性与namebar
(或\u foo
,如果需要)的实例变量组合合成,而@synthesis foo
简单地合成一个具有相同名称的属性和实例变量(foo
)
与此相当:
@interface MyClass : NSObject {
//result of @synthesize...:
Foo *_foo;
}
//result of @property...:
- (void)setFoo:(Foo *)foo;
//result of @property...:
- (Foo *)foo;
@end
@implementation MyClass
//result of @synthesize...:
- (void)setFoo:(Foo *)foo {
_foo = foo; //simplified!
}
//result of @synthesize...:
- (Foo *)foo {
return _foo; //simplified!
}
@end
综合实例变量将通过\u foo
或self->\u foo
使用(前者实际上是隐式形式),这将不涉及任何访问器方法调用
而synthezized属性将通过self.foo
使用,后者将利用对其中一个合成访问器方法的调用
想想
@syntheticfoo
作为隐式的@synthesis foo=foo
(注意这里没有相同的名称)。或多或少。.h中的这些行声明存在两个名为window和controller的公共变量:
@property (strong, nonatomic) UIWindow window;
@property (strong, nonatomic) ViewController controller;
但是这些行只声明变量的存在,实际上并没有创建它们。这取决于类如何实现它们——例如,它们可以是虚拟变量,实际上并不存在,但可以调用以编程方式创建数据的方法,或者从数据库或其他地方加载数据
.m文件中的这些行实际上创建(“合成”)变量
@synthesize window = _window;
@synthesize viewController = _viewController;
这些行实际上说的是内部变量名是_window,但变量的公共名是window。这意味着在类中,您可以通过以下方式直接访问变量
_window = something;
但在外部,您必须使用
appDelegate.window = something;
因为这是公共名称。您还可以使用self.window在类内部访问它
Objective-C的另一个有趣的事实是,使用点语法以这种方式访问变量实际上只是调用setter和getter方法来访问变量的一种简便方法。因此,合成行除了创建名为_window的变量外,还定义了以下两种方法:
- (void)setWindow:(UIWindow *)window; // to set the _window variable
- (UIWindow *)window; // to get the _window variable
如果愿意,您可以直接调用这些方法,使用
[self setWindow:someValue];
UIWindow *window = [self window];
[self setWindow:someValue];
UIWindow *window = [self window];