gpt4 book ai didi

objective-c - 在类扩展或@implementation block 中添加伪私有(private)变量有什么区别?

转载 作者:可可西里 更新时间:2023-11-01 04:19:20 26 4
gpt4 key购买 nike

将伪私有(private)实例变量放在 .m 文件内的类扩展中,或将它们放在新引入的 @implementation 括号中(如下所示)有什么区别?

一种或另一种方式是否有后果、利弊? internal2 是否以程序员必须关心的方式与 internal3 区别对待? (当然 McKay 会说不同,但问题是您是否在实践中关心)。

// MyClass.m

@interface MyClass () {
id internal2;
}
@end


@implementation MyClass {
id internal3;
}

- (void)internalMethod {
NSLog(@"%@ %@", internal2, internal3);
}

@end

来源:http://www.mcubedsw.com/blog/index.php/site/comments/new_objective-c_features/

最佳答案

这两种方法之间的主要区别在于您可以在单独的 header 中包含类扩展,而@implementation ivars 显然必须与 .m 文件中的@implementation block 一起使用(并且只能有一个 @给定类的实现(不包括扩展))。这样做的实际结果是您可以拥有多个级别的“私有(private)”ivars:

  • MyClass.h:公共(public)变量
  • MyClass+Private.h:半私有(private)ivars
  • MyClass.m:真正私有(private)的ivars

作为一个假设的例子,假设 MyClass 是 UIView。在这种情况下,UIView.h 是我们所有人都可以访问的 header ,UIView+Private.h 是“私有(private)” header ,只有 Apple 可以访问,而 UIView.m 的内容只有专门负责 UIView 的人需要知道关于。

关于objective-c - 在类扩展或@implementation block 中添加伪私有(private)变量有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9122413/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com