目标c – 在目标C中有私人成员的不同方法的比较

前端之家收集整理的这篇文章主要介绍了目标c – 在目标C中有私人成员的不同方法的比较前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我来自C / Java世界,很明显如何创建私人会员.然而,我在目标C中看到了几种方法来做到这一点,而且我想听听这个问题

1)在.h文件中声明为@private

@interface MyClass : NSObject
{
    @private
    int someMember;  
}
@end

2)在.m文件的界面中声明它们

@interface MyClass() {
    int someMember;  
}
@end

@implementation MyClass
@end

3)在实施中声明它们

@implementation MyClass {
     int someMember;  
}
@end

什么是首选方法,为什么?我想念任何其他方法吗?

解决方法

我的偏好是#3:
// MyClass.m
...
@implementation MyClass {
     int someMember;
}
@end

它允许您干净地抽象和最小化依赖关系.

由于每个objc对象都是动态分配的,并且几乎没有物理依赖关系,所以您可以拥有最快的构建时间和最丰富的对象表示最小的编译开销(例如,最小的#imports和物理依赖).

抽象也是一个巨大的加法 – 私有是默认的,你不应该偏离这个原因,也没有什么理由将内部公开给别人.这一切都非常好地保护,同时确保类型安全性不受影响. Big plus:您也可以轻松地在对象中声明C值,而不会让每个人都暴露于所有C库的依赖关系,而不是PIMPL,而不是全局范围内的结构,而不是一个* void **,而是一个适当的值.这是一个很好的编译防火墙.如果您曾在大型C或C项目上工作,您可能会高兴.

当然,宣布选项#2所示的ivars会带来所有这一切.所以这在很大程度上取决于你在哪里以及如何看待变量.一个ivar声明是具体的,而一个属性可能是抽象的 – 所以我喜欢将具体的混合和界面与接口进​​行分组; #2或#3是理想的,除非您需要向后兼容性.

如果你想要(伪)私有属性,我建议你在类继承中声明它们:

// MyClass.m
...
@interface MONClass ()
@property (nonatomic,copy) NSString * string;
@end

猜你在找的C&C++相关文章