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

2019-01-31  本文已影响5人  FanChason

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

Snip20190131_27.png Snip20190131_28.png

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

Talk is cheap. Show me the code


开始正文

@package说明

Snip20190131_26.png 1674413-2c574938dde614fa.png

详见官方文档

使用举例

#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

#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

举例结果分析

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

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

相信@package也会使用了

参考:

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

上一篇 下一篇

猜你喜欢

热点阅读