分类(category)的设计
1).类中经常容易填满各种方法,而这些方法的代码则会全部堆在一个巨大的实现文件里。在这种情况下,可以用过OC的分类机制,把类代码按逻辑划入几个分区中
#import @interface EOCPerson : NSObject@property(nonatomic, copy, readonly) NSString *firstName;
- (id)initWithFirstName:(NSString *)firstName;
@end@interface EOCPerson (Friendship)
- (void)addFriend:(EOCPerson *)person;
@end@interface EOCPerson (Work)
- (void)performDayWork;
@end
#import "EOCPerson.h"
@interface EOCPerson (Friendship)
- (void)addFriend:(EOCPerson *)person;
@end#import "EOCPerson+Friendship.h"
@implementation EOCPerson (Friendship)
-(void)addFriend:(EOCPerson *)person
{
}
@end
#import "EOCPerson.h"@interface EOCPerson (Work)
-(void)performDayWork;
@end#import "EOCPerson+Work.h"
@implementation EOCPerson (Work)
-(void)performDayWork
{
}
@end
【分类(category)的设计】2).如果有一些私有的方法不想公开,可建一个Private的分类,只在实现文件实现不声明,那就可以做到保密性。
3).为分类添加属性。尽管声明了属性,但分类不会为属性设置set/get方法,类似于@dynamic
@interface EOCPerson (Friendship)
@property(nonatomic, strong) NSArray *friends;
- (void)addFriend:(EOCPerson *)person;
@end#import "EOCPerson+Friendship.h"
#import static const char *kFriendsPropertyKey = "kFriendsPropertyKey";
@implementation EOCPerson (Friendship)
-(void)addFriend:(EOCPerson *)person
{}-(NSArray *)friends
{
return objc_getAssociatedObject(self, kFriendsPropertyKey);
}-(void)setFriends:(NSArray *)friends
{
objc_setAssociatedObject(self, kFriendsPropertyKey, friends, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}@end
推荐阅读
- 热闹中的孤独
- JAVA(抽象类与接口的区别&重载与重写&内存泄漏)
- 放屁有这三个特征的,请注意啦!这说明你的身体毒素太多
- 一个人的旅行,三亚
- 布丽吉特,人生绝对的赢家
- 慢慢的美丽
- 尽力
- 一个小故事,我的思考。
- 家乡的那条小河
- 《真与假的困惑》???|《真与假的困惑》??? ——致良知是一种伟大的力量