Objective_C扩展机制学习

学obj_c已有一年时间了,开发iphone也有一年时间了。首先学习obj_c的时候,是赁着c/c++的基础,所学的知识是按c/c++的方式去学习,其实obj_c是c的超集当时一点也没体会到,其精髓也是完全没有理解到。随关时间的推移,慢慢了解更多。

obj_c比c/c++更强大,因为它包含了一些设计模式在里面。听说java里几乎包括了所有的设计模式,不过我没有深入用过java,曾经用过j2me写过一点点逻辑。用obj_c最灵活的两 点就是:category与associative. 我把他们归为obj_c的扩展机制。category可以扩展一个类的方法,associative可以扩展一个类的属性。 这两种方法加起来其功能完全等效于c++中的继承。

下面看一个associative的列子,需要的头文件是:

<style type="text/css"> p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; font: 11.0px Menlo; color: #d42722} span.s1 {color: #79482e} </style>

#import <objc/runtime.h>

static char overviewKey = 'a'; NSArray *array = [[NSArray alloc] initWithObjects:@ "One", @"Two", @"Three", nil]; // For the purposes of illustration, use initWithFormat: to ensure // we get a deallocatable string NSString *overview = [[NSString alloc] initWithFormat:@"%@", @"First three numbers"]; objc_setAssociatedObject ( array, &overviewKey, overview, OBJC_ASSOCIATION_RETAIN); [overview release]; NSString *associatedObject = (NSString *) objc_getAssociatedObject (array, &overviewKey); NSLog(@"associatedObject: %@", associatedObject); objc_setAssociatedObject ( array, &overviewKey, nil, OBJC_ASSOCIATION_ASSIGN ); [array release];
objc_setAssociatedObject给array增加了一个属性,我们可以通过key获取这个属性,见上面代码:objc_getAssociatedObject, 第二个objc_setAssociatedObject设为nil,则是删除这个属性。

关于category,大家就google一下吧。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值