看YYKit
源码会看到一些@package的使用,如下:
最近在研读一些博客和源码,看到一句话感触很多
开始正文
@package说明
详见官方文档
使用举例
-
先看下demo结构图
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报错情况如下
-
3,在父类子类外部使用父类定义实例变量
build后privateStr报错情况如下
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后报错如下:
-
5.2,run后报错如下:
-
举例结果分析
看完上面测试结果,应该了解了官方那句话:
@package变量,
对于framework内部,相当于@protected, (如使用举例2)
对于framework外部,相当于@private(如使用举例5.2)
这个特性,很适合用于开发第三方的静态类库,因为多数人并不希望让别人知道自己属性的值。
相信@package也会使用了
参考:
iOS@private,@protected,@public,@package详解及使用
iOS 关键词@package, @private, @protected, @public