iOS Xcode 4属性访问

Dac*_*hmt 5 xcode accessor ios xcode4

我最近切换到Xcode 4,我真的不明白这种写入访问器的新方法.例如,在创建新项目时自动生成的应用程序委托类中,该window对象不是以@interface这种方式声明的:

@property (nonatomic, retain) IBOutlet UIWindow *window;
Run Code Online (Sandbox Code Playgroud)

然后,在实现文件中,我们有了@synthesize window=_window;.在函数中,我们有self.windowOR _window.

例如:

[self.window makeKeyAndVisible]; // in didFinishLaunchingWithOptions function
[_window release]; // in dealloc function
Run Code Online (Sandbox Code Playgroud)

你能解释我的区别,为什么有没有在@interface,所以我们做@synthesize window=_window;的,而不是@synthesize window;和之间有什么区别self.window_window,我的意思是,当我必须打电话给其中一个比另一个更?

我有点迷失了,感觉就像新的代码,我正在努力做同样的工作......

谢谢!

Dav*_*ong 16

  1. "为什么没有@interface"

    运行时正在为您合成ivar.

  2. "我们为什么这样做 @synthesize window=_window;

    这意味着该window属性将使用一个名为的ivar _window(默认情况下,ivar名称是属性的名称)

  3. " self.window和之间有什么区别_window?"

    前者使用window"getter"方法(即foo = [self window]),后者直接访问ivar.

  4. "为什么我要打一个比另一个多?"

    在您的dealloc方法中使用访问器方法通常被认为是不安全的,这意味着首选使用ivar.