Доступ к свойствам iOS Xcode 4 - PullRequest
5 голосов
/ 26 мая 2011

Я недавно переключился на Xcode 4, и я действительно не понимаю этот новый способ написания аксессоров.Например, в классе делегата приложения, который автоматически создается при создании нового проекта, объект window не объявляется в @interface, а только так:

@property (nonatomic, retain) IBOutlet UIWindow *window;

Затем вФайл реализации, у нас есть @synthesize window=_window;.А в функциях у нас есть либо self.window ИЛИ _window.

Например:

[self.window makeKeyAndVisible]; // in didFinishLaunchingWithOptions function
[_window release]; // in dealloc function

Можете ли вы объяснить мне разницу, почему в @interface нет ничегопочему мы делаем @synthesize window=_window; вместо @synthesize window; и в чем разница между self.window и _window, я имею в виду, когда мне нужно звонить одному больше, чем другому?

Янемного потерян, и чувствую, как новый код, который я делаю, пытаясь сделать то же самое, не работая должным образом ...

Спасибо!

Ответы [ 2 ]

16 голосов
/ 26 мая 2011
  1. "Почему в @interface" нет ничего

    Среда выполнения синтезирует для вас ивар.

  2. "Почему мы делаем @synthesize window=_window;

    Это означает, что свойство window будет использовать ивар с именем _window (по умолчанию имя ивара является именем свойства)

  3. «В чем разница между self.window и _window

    Первый использует window метод «получения» (т. Е. foo = [self window]), а второй напрямую обращается к ивару.

  4. «Почему я должен звонить одному больше, чем другому?»

    Как правило, считается небезопасным использование методов доступа в вашем методе dealloc, что означает, что использование ivar является предпочтительным.

2 голосов
/ 26 мая 2011

Это не имеет ничего общего с Xcode 4. Это Objective-C 2.0 (который Xcode 4 использует по умолчанию при создании шаблонов проектов).

Я рекомендую прочитать главу о свойствах в Цель-C Programming Language , который должен прояснить ситуацию

И выполнение вещей "по-старому" все равно будет работать.Вам не нужно менять все в одночасье, просто удалите автоматически созданный код, если он вам не нравится, пока не почувствуете себя комфортно с новым синтаксисом.

...