IOS Category不要重写原有类方法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了IOS Category不要重写原有类方法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1741字,纯文字阅读大概需要3分钟。
内容图文
![IOS Category不要重写原有类方法](/upload/InfoBanner/zyjiaocheng/1050/4ba28482553c4d2387b5e6b7dc67e39f.jpg)
原创Blog,转载请注明出处
blog.csdn.net/hello_hwc
总结出来一句话
如果要重写现有类的方法,请考虑使用继承。
-------
前言:
Category是一种向现有类中添加方法,而不需要继承或者改变现有类的方式。在IOS开发中,使用还是十分广发的。例如在CoreData中,用category来为NSManagedObject类添加适当方法。
FAQ:
为什么不直接把方法放到ViewController中?
因为,如果把这些代码都放到Controller中,会造成Controller过于臃肿,难以维护。
一 Category简介
类别可以建立在任何类的基础上,而不需要获得获得或者修改原有类的代码。类别添加的方法对于当前类和子类都可以访问。 在IOS Rumtime时候,类别的方法和原有类的方法并没有什么区别。
注意:
类别可以添加类方法和实例方法。虽然语法上支持添加属性,但是并不适合添加额外的属性,因为无法跟踪这些额外的属性。
Category举例
我想要为UIButton定制一个方法来获得配置自己想要的效果。
1 创建Category
选择新建Objective C File -> Next
选择Category,在class中键入UIButton,File中键入想要的名字,我这里是WCProgress。->Next
会生成两个文件
UIButton+WCProgress.h
UIButton+WCProgress.m
然后在.h文件中定义接口
#import <UIKit/UIKit.h>
@interface
UIButton (WCProgress)
-(void)WC_setUpCustomButton;
;
@end
在.m文件中实现接口
@implementation
UIButton (WCProgress)
(void)WC_setUpCustomButton{
[self setTitle:@"CustomButton" forState:UIControlStateNormal];
[self setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
self.backgroundColor = [UIColor yellowColor];
self.layer.cornerRadius = CGRectGetHeight(self.bounds)/2;
}
@end
这样,就可以在使用的地方如下使用
UIButton * button = [[UIButton alloc] initWithFrame:CGRectMake(0,0,150,25)];
[button WC_setUpCustomButton];
[self.view addSubview:button];
button.center = self.view.center;
效果如下
二 为什么不要重写原有类方法
主要原因如下:
CocoaFramework有很多是用Category实现的,重写之后,会导致在Runtime的时候,只有一个方法会被执行,而哪个会被执行是undefined。
例如,重写NSString的一个方法base64EncodedString,而其他CocoaFramework的也有可能使用Category来实现这个方法,这样就会导致在Runtime的时候,执行哪个方法是Undefined。
另外,有个地方要注意,那就是Category方法的命名。
通常的明明方式是加一个前缀,例如
-(void)WC_setUpCustomButton;
因为,现在名字并未发生冲突,IOS版本在更新,SDK也在更新,也就是说要尽量保证将来方法的名称也不发生冲突。
附上Apple 文档的相关链接
原文:http://blog.csdn.net/hello_hwc/article/details/43964643
内容总结
以上是互联网集市为您收集整理的IOS Category不要重写原有类方法全部内容,希望文章能够帮你解决IOS Category不要重写原有类方法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。