类扩展 & 分类

150 篇文章 0 订阅

1) 通过延展来实现方法的私有, 延展的头文件独立. 这种方法不能实现真正的方法私有, 当在别的文件中引入延展的头文件, 那么在这个文件中定义的类的对象就可以直接调用在延展中定义所谓私有的方法.

2) 第二种实现延展的方式是延展没有独立的头文件, 在类的实现文件 .m 中声明和实现延展, 这种方法可以很好的实现方法的私有, 因为在OC中是不能引入 .m的文件的.

3) 第三种实现方法私有的方式是在 .m 文件中得 @implementation中直接实现在@interface 中没有声明的方法. 这样也可以很好的实现方法的私有.



//=======================================================================================

扩展框架中得类的功能的时候 , 只能使用 分类来实现. 因为不能修改框架原有的类的内容, 如: NSString+Test(大写开头)


自定义的类的 类扩展, 可以使用 Extension , 随意修改.


类扩展 使用 .h文件 创建新的 Extension 这种方式 , 只能在 .m文件中导入 并实现相应的方法, 因为导入到.m文件, 所以声明的成员变量和方法都成私有的了..

好处就是 不用对 原有的 类动手术 , 单独的 .h文件分离出来 更清晰,  不能扩展 共有的 成员变量...

main.m

#import "Cat.h"
#import "NSString+isURL.h"
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
	@autoreleasepool {
		Cat * cat = [[Cat alloc] init];
		cat.name = @"mimi";
		cat.hobby = @"ball";
		[cat description];
		[cat eat];
	}
	return 0;
}

Cat.h

#import <Foundation/Foundation.h>

@interface Cat : NSObject
@property (nonatomic, strong) NSString * name;
- (void)eat;
- (void)description;
@end

// 在类内部写扩展 , 共有方法 共有变量
@interface Cat ()

@property (nonatomic, strong) NSString * hobby;
- (void)run;

@end

Cat.m

#import "Cat.h"
#import "Cat_play.h"

// 在 .m文件定义的类扩展, 只能变成 私有方法 & 私有成员变量.
@interface Cat ()
- (void)privateEat;
@end

@implementation Cat
- (void)eat
{
	[self privateEat];
}
- (void)privateEat
{
	NSLog(@"cat private eating");
}
- (void)run
{
	NSLog(@"cat running");
}
- (void)description
{
	NSLog(@"cat name is %@ , hobby is %@", self.name, self.hobby);
}
- (void)play
{
	NSLog(@"cat play");
}

@end


Cat_play.h

#import "Cat.h"
// 单独分离出来的类扩展, 只能变成 私有方法 & 私有成员变量.
@interface Cat ()
- (void)play;
@end



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值