注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

又一个部落格

换过很多备忘录,不知道这本怎么样!

 
 
 

日志

 
 

objective-c category extensions  

2010-05-08 14:33:19|  分类: cocoa |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
category不能创建实例变量, category 只能定义方法, category 和原来的类是共享实例变量的,包括私有变量

@interface MyObject : NSObject
{
    NSNumber *number;
}
- (NSNumber *)number;
@end

@interface MyObject (Setter)
- (void)setNumber:(NSNumber *)newNumber;
@end


@implementation MyObject

- (NSNumber *)number {
    return number;
}
@end


几个用途

1。在原来的cocoa类中增加方法
增加的方法可以被继承,和原来的方法没有什么区别

2。把一个庞大的类分割成很多类别,分别 放在不同的实现文件中

值得注意的是, category虽然也可以重载方法,但是 category并不是子类的替代品,强烈不建议用 category来重载方法, 这样做有几个重大的缺陷:
1。 category的方法,是写在本类当中的,自然就不会有 super 指针,也就是说,重载后就不能执行原先的方法。
2。 category分类不能重载同一个类中的其他 category中重载的方法,因为并不知道到底那个category继承的优先级高一点。

extensions
extensions和category差不多,就是匿名的 category,
@interface MyObject : NSObject
{
    NSNumber *number;
}
- (NSNumber *)number;
@end

@interface MyObject ()
- (void)setNumber:(NSNumber *)newNumber;
@end

@implementation MyObject
- (NSNumber *)number {
    return number;
}

- (void)setNumber:(NSNumber *)newNumber {
    number = newNumber;
}
@end

上面要注意的就是,必须要有extensions的方法实现必须写在 implementation中
extensions括号中不写名字

参考文献
http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocCategories.html
  评论这张
 
阅读(1824)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017