研究Extension和Category的一个例子
Posted 东方春
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了研究Extension和Category的一个例子相关的知识,希望对你有一定的参考价值。
Category:
1. 无法添加实例变量
2.将类的实现分散到多个不同文件或多个不同框架中。
Extension:
1. 可以添加实例变量
注: 如果Category的头文件中也使用Extension(即将 @interface MyData (XX)改为@interface MyData() ),依然不能使用变量。
千万不要认为在任何地方使用Extension,编译器都会将变量放进来。
但是如果MyData.m中,包含以下MyData+XX.h,那就可以运行通过。
所以什么情况下内存会将变量包含进来呢? 就是:为标准声明(@interface MyData:NSObject)or 能够已经包含进MyData.m的Extension。
如下代码,外部的Extension的property可以被使用,本质原因就是在MyData.m中已经包含进来了(本质上还是因为已经成为了内部Extension)
----------MyData.h----------
#import <Foundation/Foundation.h>
@interface MyData : NSObject
@end
----------MyData.m----------
#import "MyData.h"
#import "MyData+XX.h" //这句话是关键,如果没有这句话变量依然无法放到类实例内存中
@interface MyData ()
@end
@implementation MyData
@end
----------MyData+XX.h----------
#import <Foundation/Foundation.h>
#import "MyData.h"
@interface MyData () //如果制定定义为 category,就是标准的category了。
@property (nonatomic, strong) NSString *strTest3;
- (void)put2;
@end
----------MyData+XX.m----------
#import "MyData.h"
#import "MyData+XX.h"
@implementation MyData (XX)
- (void)put2{
self.strTest3 = @"abc";
}
@end
以上是关于研究Extension和Category的一个例子的主要内容,如果未能解决你的问题,请参考以下文章
Objective-C中的类目(Category),延展(Extension)
当 Codegen 处于 ClassDefinition 或 Category/Extension 中时,如何让 SwiftUI 预览工作?