sách gpt4 ai đã đi

Có lợi ích nào về hiệu suất/thời gian biên dịch khi nhập UIKit thay vì các thành phần UIKit cụ thể không?

In lại 作者:行者123 更新时间:2023-11-28 21:07:56 26 4
mua khóa gpt4 Nike

例如我有以下界面。

#import

@interface someClass : NSObject
@property (nonatomic, copy) NSString *string;
@property (nonatomic, copy) UIFont *font;
@kết thúc

我觉得我们没有必要导入整个 UIKit。我不确定下面是否会比上面更好。

#import
#import

@interface someClass: NSObject
@property (nonatomic, copy) NSString *string;
@property (nonatomic, copy) UIFont *font;
@kết thúc

我认为通过只导入 UIKit 我可以避免不需要列出所有其他需要的框架。但是这样做有什么真正的优势/劣势吗?此外,如果我不使用#import,而是使用@import 模块,那么在这个特定示例中会有什么不同。

1 Câu trả lời

理论上,是的。这就是 C 和 Objective-C header 的设计方式。你应该只导入你需要的组件,因为这对编译器来说工作更少,因此编译时间更快。如果您查看 Apple 框架,它们通常是这样工作的(每个 header 仅导入它使用的组件)。

在实践中,维护您需要的 header 列表将是一项巨大的工作量,而且您几乎看不到任何性能改进。那是因为 UIKit 组件非常紧密地联系在一起,这意味着你的 UIFont.h header 将导入其他 UIKit headers,这些 UIKit header 又会导入其他 headers,等等......而且你最终每次都会导入大部分 UIKit。

正如您所提到的,真正有所作为的是一个名为 Modules 的编译器功能。需要启用(但我相信默认情况下启用它,请在 Xcode build设置中检查 Enable modules)。当您使用模块时,例如 UIKit 模块,编译器会在第一次导入时编译整个模块,然后将其缓存。然后,源文件中同一模块的所有其他导入都将使用此缓存版本,从而大大缩短编译时间。

默认情况下,您将通过执行 @import UIKit; 来导入 UIKit 模块。 , 但编译器也会理解 #import作为 UIKit 模块的导入(如果启用了模块),因此它将以相同的方式工作。

您还可以使用点符号导入模块的一部分(例如 @import UIKit.UIFont; ),但请记住,这仍会触发整个模块的编译和缓存,因此不要将其视为性能改进。同样,编译器会理解 #importBẰNG@import UIKit.UIFont; .

综上所述,您的问题的答案是:#import#import将导致完全相同的性能影响。你应该使用第一个,因为它更容易,感谢编译器作者,再也不用考虑它了!

关于ios - 导入 UIKit 而不是特定的 UIKit 组件是否有任何性能/编译时间优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44728322/

26 4 0
行者123
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com