@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
上一篇下一篇

猜你喜欢

热点阅读