码迷,mamicode.com
首页 > 其他好文 > 详细

研究Extension和Category的一个例子

时间:2016-06-27 19:51:04      阅读:155      评论:0      收藏:0      [点我收藏+]

标签:

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的一个例子

标签:

原文地址:http://www.cnblogs.com/dongfangchun/p/5620797.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!