Objective-C中Extension与Category的使用
来源:互联网 发布:淘宝质量好的女包店 编辑:程序博客网 时间:2024/06/05 05:16
Objective-C 2.0增加了class extensions用于解决两个问题:
- 允许一个对象可以拥有一个私有的interface,且可由编译器验证。
- 支持一个公有只读,私有可写的属性。
私有接口(Private Interface)
Objective-C 2.0以前, 若要定义私有函数,通常是在实现文件中声明一个"Private" category:
@interface MyClass (Private)
- (id)awesomePrivateMethod;
@end
然而, 类的私用方法通常是希望实现在类的@implementation块中的,而不是像上面的Category的方法那样实现在独立的@implementation区块中。事实上,Category仅仅是弥补了Objective-C缺少public/private限定的不足。
真正的问题是Objective-C编译器会认为在Category中声明的方法将会在别处实现,所以编译器并不会尝试确认它们是不是真得都被实现了。也就是说,开发者声明的方法有可能并未实现,而且编译器也不会有什么警告。编译会以为它们将在别的地方或独立的文件中实现。
使用class exteionsion,在其中声明的方法和属性的实现将放在class的@implementation区块中。否则,编译器就会报错。
// someClass.m @interface someClass () -(void)extend; @end @implementation someClass // 所有声明在头文件或父类中方法的实现 // 或者一些私有函数 -(void)extend { // implement private method here; } @end
公有可读、私有可写的属性(Publicly-Readable, Privately-Writeable Properties)
实现一个不可变(immutable)的数据结构通常有一个好处是外部代码不能用setter修改对象的状态。然而,可能又希望它在内部又是一个可写的属性。Class extensions可以做到这一点:在公共接口(类的声明中)中,开发者可以声明一个属性是只读的,随后在类扩展中声明为可写。这样,对外部代码而言,该属性将是只读的,而内部代码却可以使用它setter方法。
@interface MyClass : NSObject@property (retain, readonly) float value;@end // 私有的extension, 隐藏在主实现文件中.@interface MyClass ()@property (retain, readwrite) float value;@end
看起来相似,其实不同
Class extension常常被误解为一个匿名的category。它们的语法的确很相似。虽然都可以用来为一个现有的类添加方法和属性,但它们的目的和行为却是不同的。
参考: Apple Documenation
原文地址: Minutia on Objective-C Categories and Extensions
转载请注明出处: http://blog.csdn.net/horkychen
- Objective-C中Extension与Category的使用
- Objective-C中Extension与Category的使用
- Objective-C中Extension与Category的使用
- objective-c 中 category 和 extension 的区别
- Objective-C Category 、 Extension 、 非正式协议 及Block的使用
- objective-C中category与extension的探究——关于extension(类扩展)的实验和总结
- Objective-C Category和Extension
- Objective-C中的继承与多态, Category, Extension
- Objective-c的category(分类)和Extension(扩张)
- Objective-C分类 (category)和扩展(Extension)
- objective-c之Category和Extension
- Objective-C分类 (category)和扩展(Extension)
- 【Objective-C】分类 (category)和扩展(Extension)
- Objective-C分类 (category)和扩展(Extension)
- Objective-c 中的Category和Extension
- Objective-C分类 (category)和扩展(Extension)
- Objective-C分类 (category)和扩展(Extension)
- Objective-C 类别(category)和扩展(Extension)
- 介绍Heuristiclab的RoutePlanning模块
- Java多线程
- VMware下Ubuntu安装Vmware Tools后hgfs无法看到共享文件的解决方法
- EasyUI 分页总结
- OK6410 Linux DS18B20驱动
- Objective-C中Extension与Category的使用
- tomcat和eclipse配置问题
- CSS如何定位工程
- U盘容量突然减小了?磁盘管理下看到U盘被分区了!
- 找工作总结
- 内省(Introspector)
- Form表单的一些Type类型
- div+css布局控制div定位浮动层在背景图片上的半透明阴影效果
- 关联规则算法 简述