您的位置:首页 > 其它

类的扩展, 延展

2015-12-28 13:35 169 查看
//类的扩展: 为类扩展实例变量和方法
//前提: 现有一个类

//1.已经类(比如:Girl)的扩展
//a,直接修改, 可以扩展实例变量和方法
//b.Extension, 延展, 扩展"私有"实例变量和"私有"方法(只在类内部使用),方法的实现要写在原有文件的*.m中
//注: 只有是能在@interface 中写的内容吗都可以在Extension中实现, 比如: 遵守的协议, 写属性
这样话, 在Girl自己创建的类Girl中, 就只需要在.m中将Extension中的方法写到里面就可以了,因为写在.m文件中, 所有外界是看不到的(因为一般都会写在.h中, 接口部分, 用户可以看到)而这方法私有的. 只有在类的内部才能使用. 这里是@interface Girl () ;
#import "Girl.h"

@interface Girl () //注意: 写在下一行, 这种表示协议
//{
//    NSString *_color;
//}
@property (nonatomic, copy)NSString <NSCopying> *color;

- (void)sayHi;

@end
/*头文件相当于直接引进入, 推荐使用() 注意:延展一般写在#import的 下下行, 不然不会提示!

//2.未知类(比如:NSString)的扩展
//a.继承, 可以扩展实例变量和方法
//缺点: 扩展的实例变量和方法只有子类才具备, 父类不能使用
//b.Category, 分类, 类目, 只能扩充方法, 不能扩充实例变量

//为NSString添加sayHi (选择OC-file, 选择,类名, 还有协议, 工程名, 并且只能扩充方法, 不能扩充实例变量) 会在文件中创建了NSString + SayHi 的文件. 再声明中出现@interfance NSString (sayHi)

[NSString sayHi];
//注: Category中扩充的方法如果和原来类中的方法相同, Category中的方法具有更高的优先级
NSString *string = @"kris";
NSLog(@"%@",[NSString getFirstLetter:string]);
NSLog(@"%@", [string getFirstLetter1]);

NSString *string1 = @"abcdsdfwdfdsggd";

NSLog(@"%@",[string1 middleLetter]);
NSLog(@"%@", [NSString middleLetter1:string1]);
//还有协议:protocal,
category(类目), extension(延展),protocal(协议),三者都只在OC-file 创建的.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: