为啥 Xcode 在创建类时会生成“不必要的”代码?
Posted
技术标签:
【中文标题】为啥 Xcode 在创建类时会生成“不必要的”代码?【英文标题】:Why Xcode generates "unnecessary" code when create class?为什么 Xcode 在创建类时会生成“不必要的”代码? 【发布时间】:2015-11-17 09:51:06 【问题描述】:当我想用 Xcode 创建一个 CocoaTouch 类时,它会生成一个 .h 和 .m 文件,让我困惑的是为什么 .m 文件有这样的代码:
#import "MealTableViewController.h"
//**************below looks unnecessary
@interface MealTableViewController ()
@end
//**************above looks unnecessary
@implementation MealTableViewController
@end
在我看来,这似乎是不必要的,因为我已经声明这个类实现了MealTableViewController.h
,即使我删除它,结果也会和以前一样。那么为什么会自动生成这段代码呢?创建它的目的是什么?谁知道请教我,谢谢!
【问题讨论】:
这是用于声明私有属性的。 阅读这些 2 https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/CustomizingExistingClasses/CustomizingExistingClasses.html AND http://***.com/questions/14675201/objective-c-class-extension 【参考方案1】:在古代,Objective-C 编译器需要在方法实际使用时知道方法名称和签名。因此,如果您的类定义了一个方法- (void)foo:(NSString *)bar;
,那么编译器必须知道这一点,然后您才能真正调用[self foo:@"bing"];
。您不能总是以在使用前定义方法的方式“排序”您的方法(例如,如果您有方法 alpha
和方法 beta
但两者都相互调用)。如果您不想在 .h
文件中公开内部方法,则必须在类扩展或类别中声明它们。
如今,Objective-C 编译器已经足够智能,因此不再需要这种解决方法。但是如果你想声明不应在.h
文件中公开的属性,你仍然需要在类扩展中这样做。这就是为什么默认的空模板仍然添加扩展名的原因。
【讨论】:
【参考方案2】:@interface
在你的.m
文件中意味着你可以在这里声明一些私有属性/方法
【讨论】:
以上是关于为啥 Xcode 在创建类时会生成“不必要的”代码?的主要内容,如果未能解决你的问题,请参考以下文章
创建新的 C++ 类时如何使 XCode 使用 .hpp 标头而不是 .h?