ios - 为什么 Xcode 在创建类时生成 "unnecessary"代码?

标签 ios xcode

当我想用 Xcode 创建一个 CocoaTouch 类时,它会生成一个 .h.m 文件,令我困惑的是为什么 .m 文件有这样的代码:

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

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

@end

在我看来,它看起来没有必要,因为我已经声明了这个类实现MealTableViewController.h,即使我删除它,结果也和以前一样。所以为什么这段代码会自动生成吗?创建它的目的是什么?谁知道请教教我,谢谢!

最佳答案

在古代,Objective-C 编译器需要在实际使用方法时知道方法名称和签名。因此,如果您的类定义了一个方法 - (void)foo:(NSString *)bar; 那么编译器必须在您实际调用之前知道这一点 [self foo:@"bing"] ;。您不能总是以总是在使用前定义方法的方式“排序”您的方法(例如,如果您有方法 alpha 和方法 beta 但两者都调用彼此)。如果您不想在 .h 文件中公开内部方法,则必须在类扩展或类别中声明它们。

如今,Objective-C 编译器已经足够智能,不再需要这种解决方法。但是,如果您想声明不应在 .h 文件中公开的属性,您仍然需要在类扩展中这样做。这就是默认的空模板仍然添加扩展名的原因。

关于ios - 为什么 Xcode 在创建类时生成 "unnecessary"代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33753772/

相关文章:

ios - 将错误重复符号 _kCHPointerSize 与 CHDataStructure 静态库链接

ios - 从 UINavigationController 堆栈转出到 UITabBarController

iOS 按钮和导航链接在列表中彼此相邻

ios - 在 Objective-C 中,如何在不舍入的情况下删除 float 的尾随零?

ios - 无法在 Swift 3 中为 URL 编码字符串

c - 如何在 Swift 中实现 AudioServicesSystemSoundCompletionProc?

ios - Swift:PrepareForSegue,Swift Cast 失败

ios - 以编程方式更改 UITabBarController 选项卡栏属性的类

android - Flutter - 当键盘出现在android上时文本字段不显示

cocoa - git 应该忽略 XCode 创建的 *.pch 文件吗?