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