标签:
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
标签:
原文地址:http://www.cnblogs.com/dongfangchun/p/5620797.html