iOS @package区别其他关键字的使用举例

YYKit源码会看到一些@package的使用,如下:

1432381-ecc6084afc33e467.png
Snip20190131_27.png

1432381-d99c493d9a34bd9b.png
Snip20190131_28.png

最近在研读一些博客和源码,看到一句话感触很多

Talk is cheap. Show me the code


开始正文

@package说明

1432381-ce3a9cc57449c89b.png
Snip20190131_26.png
1432381-17e553046b69fff2.png
1674413-2c574938dde614fa.png

详见官方文档

使用举例

  • 先看下demo结构图


    1432381-2f4b2854770e5690.png
    Snip20190131_25.png
  • 1,父类 (定义四种实例变量,并使用)

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface Father : NSObject {
@protected
    NSString * protectStr;
@private
    NSString * privateStr;
@public
    NSString * publicStr;
@package
    NSString * packageStr;
}
@end

NS_ASSUME_NONNULL_END
#import "Father.h"

@implementation Father

-(instancetype)init{
    if (self = [super init]) {
        self->packageStr = @"packageStr";
        self->privateStr = @"privateStr";
        self->protectStr = @"protectStr";
        self->publicStr = @"publicStr";
    }
    return self;
}

@end

  • 2,子类(使用父类定义的实例变量)
    直接放图了,build后privateStr报错情况如下


    1432381-36005fe31047ca6c.png
    Snip20190131_20.png
  • 3,在父类子类外部使用父类定义实例变量
    build后privateStr报错情况如下


    1432381-fa6785052189c2bb.png
    Snip20190131_22.png
  • 4, framework (定义四种实例变量)

#import <Foundation/Foundation.h>

NS_ASSUME_NONNULL_BEGIN

@interface PackageSDK : NSObject{
@protected
    NSString * protectStr;
@private
    NSString * privateStr;
@public
    NSString * publicStr;
@package
    NSString * packageStr;
}
@end

NS_ASSUME_NONNULL_END
  • 5,在framework外部使用 framework定义的实例变量
    • 5.1,build后报错如下:


      1432381-5323918325d44d61.png
      Snip20190131_23.png
    • 5.2,run后报错如下:


      1432381-86d93adb8d4e3023.png
      Snip20190131_19.png

举例结果分析

看完上面测试结果,应该了解了官方那句话:

@package变量,
对于framework内部,相当于@protected, (如使用举例2)
对于framework外部,相当于@private(如使用举例5.2)
这个特性,很适合用于开发第三方的静态类库,因为多数人并不希望让别人知道自己属性的值。

相信@package也会使用了

参考:

iOS@private,@protected,@public,@package详解及使用
iOS 关键词@package, @private, @protected, @public

猜你喜欢

转载自blog.csdn.net/weixin_33976072/article/details/87056295