控制对 Objective-C 中实例变量的访问
Controlling access to instance variables in Objective-C
从我见过的所有代码来看,几乎总是使用这样的东西来定义 属性 范围:
Class 分机
/*We declare the class extension*/
@interface MyClass ()
@property (nonatomic, retain) Type *aPrivateProperty;
- (void)aPrivateMethod;
@end
/*
We can use the main implementation block to implement our properties
and methods declared in the class extension.
*/
@implementation MyClass
/*Therefore we can use synthesize ;-)*/
@synthesize aPrivateProperty;
- (void)aPrivateMethod {
//Some code there
}
@end
但这是(据我所见)很少使用:
@interface MyClass : NSObject {
iVar *aProtectedIVar;
@public
iVar *aPublicIVar;
iVar *aSecondPublicIVar;
@protected
iVar *aSecondProtectedIVar;
@private
iVar *aPrivateIVAr;
}
@end
为什么像@private、@protected 和@public 这样的修饰符在 Objective-C 中用得不多?
您可以在三个地方声明一个全局变量。
如果你在 .h 中声明它是 public:
@property (nonatomic, strong) NSString *publicString;
相反,如果您在 .m 中声明相同的内容是私有的,则不需要第二种方式。
很少使用实例变量的访问修饰符,因为它们公开的有关您的 object 结构的信息比您希望让其他人看到的更多。 public 变量的公开绑定到所有未来的实现上,以具有相同的变量。 属性,另一方面,隐藏变量,让您稍后改变主意,计算结果而不是存储它。
属性 访问在 Objective-C 中得到了高度优化,因此实际上没有 run-time 暴露 属性 而不是变量。由于您可以通过切换到 属性 免费获得灵活性,因此很少使用 @public
公开变量。
I was interested why class extension, (like from example above) is used more often than @private
modifier
因为 class 扩展允许您将私有属性放在 .m 文件中,而不是 .h header 文件中。 Headers 从其他 .m 文件中包含会创建 compile-time 依赖关系,通过将实现细节放入 class 扩展中可以轻松避免这种情况。
从我见过的所有代码来看,几乎总是使用这样的东西来定义 属性 范围:
Class 分机
/*We declare the class extension*/
@interface MyClass ()
@property (nonatomic, retain) Type *aPrivateProperty;
- (void)aPrivateMethod;
@end
/*
We can use the main implementation block to implement our properties
and methods declared in the class extension.
*/
@implementation MyClass
/*Therefore we can use synthesize ;-)*/
@synthesize aPrivateProperty;
- (void)aPrivateMethod {
//Some code there
}
@end
但这是(据我所见)很少使用:
@interface MyClass : NSObject {
iVar *aProtectedIVar;
@public
iVar *aPublicIVar;
iVar *aSecondPublicIVar;
@protected
iVar *aSecondProtectedIVar;
@private
iVar *aPrivateIVAr;
}
@end
为什么像@private、@protected 和@public 这样的修饰符在 Objective-C 中用得不多?
您可以在三个地方声明一个全局变量。 如果你在 .h 中声明它是 public:
@property (nonatomic, strong) NSString *publicString;
相反,如果您在 .m 中声明相同的内容是私有的,则不需要第二种方式。
很少使用实例变量的访问修饰符,因为它们公开的有关您的 object 结构的信息比您希望让其他人看到的更多。 public 变量的公开绑定到所有未来的实现上,以具有相同的变量。 属性,另一方面,隐藏变量,让您稍后改变主意,计算结果而不是存储它。
属性 访问在 Objective-C 中得到了高度优化,因此实际上没有 run-time 暴露 属性 而不是变量。由于您可以通过切换到 属性 免费获得灵活性,因此很少使用 @public
公开变量。
I was interested why class extension, (like from example above) is used more often than
@private
modifier
因为 class 扩展允许您将私有属性放在 .m 文件中,而不是 .h header 文件中。 Headers 从其他 .m 文件中包含会创建 compile-time 依赖关系,通过将实现细节放入 class 扩展中可以轻松避免这种情况。