iOS开发

谈谈Objective-C中分类和类扩展

2017-08-01  本文已影响41人  kamto

1.分类Category

建立两个文件:Person+category.h和Person+category.m

#import "Person.h"
@interface Person (category)
@property (nonatomic, strong) NSString *name;
(void)categoryMethod;
@end

#import <objc/runtime.h>
@implementation Person (category)
(void)categoryMethod{
    //code}

//通过runtime手动添加setter/getter方法

- (void)setName:(NSString *)name{
     objc_setAssociatedObject(self, @selector(name), name, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
- (NSString *)name{
    return objc_getAssociatedObject(self, @selector(name));
}

注意:在原有类里使用下划线_访问分类中的属性是访问不到的,只能使用self访问

2.类扩展Extension

类扩展Extension与分类相比少了实现文件,我们称之为匿名分类

建立一个文件:Person_extension

#import "Person.h"

@interface Person ()
//私有属性
@property (nonatomic, strong) NSString *cardId;
//私有方法
- (void)extensionMethod;

@end


在Person.m中

实现类扩展的方法
-(void)extensionMethod{
    //code
}

也可以这样创建一个Extension,在.m文件中

@interface Person ()
- (void)extensionMethod2;
@end

这也是一个类扩展

温故而知新,常常写下笔记也会有意想不到的作用。

上一篇 下一篇

猜你喜欢

热点阅读