美文网首页
@private、@protected、@public、@pac

@private、@protected、@public、@pac

作者: 黄成瑞 | 来源:发表于2021-07-07 18:03 被阅读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
    

    相关文章

      网友评论

          本文标题:@private、@protected、@public、@pac

          本文链接:https://www.haomeiwen.com/subject/nqzoultx.html