2015-11-17 1 views
1

Когда я хочу создать класс CocoaTouch с Xcode, и он генерирует .h и .m файла, что путать меня почему .m файла есть такой код:Почему Xcode генерирует «лишний» код при создании класса?

#import "MealTableViewController.h" 
//**************below looks unnecessary 
@interface MealTableViewController() 

@end 
//**************above looks unnecessary 
@implementation MealTableViewController 

@end 

В мое мнение, это выглядит ненужным, потому что я объявил, что этот класс реализует MealTableViewController.h, и даже я его удаляю, результат будет таким же, как и раньше. Итак, почему этот код будет сгенерирован автоматически? Какова цель его создания? Кто-нибудь знает, пожалуйста, научите меня, спасибо!

+3

Это за объявление частной недвижимости. – pkc456

+0

Прочтите эти 2 [https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html](https://developer.apple.com/library/ios/documentation/ Какао/Концептуальные/ПрограммированиеWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html) __AND__ [http://stackoverflow.com/questions/14675201/objective-c-class-extension](http://stackoverflow.com/questions/14675201/objective-c -class-extension) – Gandalf

ответ

2

В древние времена, Objective-C компилятор необходимо знать имена методов и подпись к тому времени метод был фактически использован. Поэтому, если ваш класс определил метод - (void)foo:(NSString *)bar;, тогда компилятор должен знать об этом, прежде чем вы действительно можете позвонить [self foo:@"bing"];. Вы не всегда можете «сортировать» свои методы таким образом, чтобы методы всегда определялись перед использованием (например, если у вас есть метод alpha и метод beta, но оба называют друг друга). Если вы не хотите раскрывать свои внутренние методы в своем файле .h, вам нужно было объявить их в расширении или категории.

В настоящее время компилятор Objective-C достаточно умен, чтобы он не нуждался в этом обходном пути. Но если вы хотите объявить свойства, которые не должны отображаться в файле .h, вам все равно нужно сделать это в расширении класса. Вот почему пустые шаблоны по умолчанию все еще добавляют расширение.

+0

Большое спасибо! – starkshang

0

@interface внутри файла .m означает, что вы можете объявить здесь некоторые частные свойства/методы

Смежные вопросы