@private、@protected、@public、@pac
2021-07-07 本文已影响0人
黄成瑞
@private: 私有的 只有自己可以使用,子类也不可以使用
@protected: 受保护的 自己可以使用,子类也可以使用
@public: 公共的 只要拿到这个类的对象,就可以使用该词修饰的变量
@package: 包 这个主要是用于框架类,使用@private太限制,使用@protected或者@public又太开放,就使用这个package
示例:
// 父类TestView
@interface TestView: UIView
{
@private NSString *privateStr;
@protected NSString *protectedStr;
@public NSString *publicStr;
@package NSString *packageStr;
}
@end
@implementation
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
privateStr = @"private";
protectedStr = @"protected";
publicStr = @"public";
packageStr = @"package";
}
}
@end
// 子类TestSubView
@interface TestSubView: TestView
@end
@implementation
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
privateStr = @"privateSub"; // 这里会报错,因为私有的只有类本身可以使用,子类不能使用
protectedStr = @"protectedSub";
publicStr = @"publicSub";
packageStr = @"packageSub";
}
}
@end
// 其他类
@interface OtherView: UIView
@end
@implementation
- (instancetype)initWithFrame:(CGRect)frame {
if (self = [super initWithFrame:frame]) {
TestView *testView = [[TestView alloc] initWithFrame:self.bounds];
testView->privateStr = @"privateOther"; // 这里会报错
testView->protectedStr = @"protectedOther"; // 这里会报错
testView->publicStr = @"publicOther";
testView->packageStr = @"packageOther";
[self addSubView:testView];
}
}
@end