Начиная с XCode 4.2 до 4.3, новые .m файлы класса ViewController определяются по-разному.Зачем? - PullRequest
1 голос
/ 21 марта 2012

Как и большинство, я недавно скачал последнюю версию XCode (4.3.1). Я заметил, что когда я создаю новые UIViewController объекты, связанные .m файлы содержат дополнительный код определения класса, которого я никогда раньше не видел.

В частности, если я создаю новый UIViewController с именем 'TestViewController', я получаю следующий .m файл вывода.

\\... removed comments...
#import "TestViewController.h"

@interface TestViewController ()

@end

@implementation TestViewController

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

\ и т.д ...

Недавно добавленный код, начиная с XCode 4.3, является частью под оператором #import:

@interface TestViewController ()

@end

Какова цель этого кода? Может / должно что-нибудь идти в скобках? Должен ли какой-либо код входить в операторы @interface и @end?

Короче, какой смысл добавлять этот код в шаблон? В качестве интересного примечания, когда я пытался создать NSObject из шаблона, вышеупомянутый фрагмент кода не был добавлен. Он может появиться с шаблонами классов других типов, но в настоящее время я встречал его только с объектами UIViewController и UITableViewController.

Ответы [ 3 ]

9 голосов
/ 21 марта 2012

Это расширение класса Objective-C . Он используется для определения «частных» переменных, свойств и методов.

Идея состоит в том, что файл .h должен содержать только общедоступные свойства и методы. Очень часто при написании контроллера представления есть методы, которые вы хотите / должны написать, но эти методы не должны быть публично видимыми (то есть эти методы должны использоваться только в вашем файле .m). Вы объявляете эти методы в расширении класса, чтобы исключить его из общедоступного интерфейса .h.

2 голосов
/ 21 марта 2012

Это расширение класса, и есть хорошая статья об их использовании здесь .

1 голос
/ 21 марта 2012

Это просто class extension, чтобы "скрыть" объявление свойств / методов из заголовочного файла в файле реализации, для получения дополнительной информации см. ссылку .Вам не нужно его использовать, но вы обнаружите, что он очень удобно создан автоматически.

...