木先生

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

2012年3月13日

摘要: 第七篇中讲动态属性时,提到了resolveInstanceMethod,这个方法不仅在这里用,还用来实现消息的转发。消息的转发就是向对象发送一个它本身并没有实现的消息,在运行时确定它实际产生的行为。举个例子来说,一个Person对象,在运行时根据实际情况,决定是否响应fly这样的方法。如果条件具备,则fly被响应。否则,则不具备这样的方法。类似于AoP的做法。要实现消息转发,需要覆盖三个方法:1, resolveInstanceMethod(可选),这个方法为你提供了一个机会,在消息被发现本身没有在类中定义时你可以通过class_addMethod将它添加进去。如果你不这样做,不管你最终返回Y 阅读全文
posted @ 2012-03-13 20:38 一十一王 阅读(1728) 评论(0) 推荐(1) 编辑

摘要: objective-c 2.0中增加了一个新的关键字@dynamic, 用于定义动态属性。所谓动态属性相对于@synthesis,不是由编译器自动生成setter或者getter,也不是由开发者自己写的setter或getter,而是在运行时动态添加的setter和getter。一般我们定义一个属性都是类似以下方法:@interface Car:NSObject;@property (retain) NSString* name;@end@implement Car;@synthesize name;@end这种情况下,@synthesize关键字告诉编译器自动实现setter和getter。 阅读全文
posted @ 2012-03-13 18:19 一十一王 阅读(1041) 评论(1) 推荐(0) 编辑

摘要: 后面主要介绍oc类的运行时行为。这里面包括运行时方法的更换,消息的转发,以及动态属性。这些对于面向方面编程AOP的热爱者还是很有用的,当然还有很多其他的作用,例如可配置编程之类的。但是按照我之前在java和dotnet的编程经验,这些都是使用性能为代价的。所以尽量在程序开始部分完成操作,而不是用于程序行为的代码。第一段代码是方法交换。下面的例子将使用自己的代码替换[NSString stringByAppendingPathComponent]方法的实现。这里是替换代码:NSString * NSStringstringByAppendingPathComponent(id SELF, SEL 阅读全文
posted @ 2012-03-13 16:20 一十一王 阅读(1449) 评论(0) 推荐(0) 编辑

摘要: 集合类型,常用的包括NSArray, NSDictionary. 以及用于遍历的NSEnumerator对象。创建不可变的数组对象:NSArray * ary = [NSArray arrayWithObjects:@"title", @"content", [NSNumber numberWithInt:2],nil];需要注意的是,NSArray中不能存储基本类型如float,int,double之类的,否则都会被设置为0。另一个,上面这个调用必须用nil来结尾,这也意味着NSArray中不能存储nil。对数组对象的遍历:NSEnumerator * 阅读全文
posted @ 2012-03-13 15:44 一十一王 阅读(933) 评论(0) 推荐(0) 编辑

摘要: 获取当前日期:NSDate * date = [NSDate date];//不过这个方式,获取的是UTC事件。NSDate * date = [NSCalendarDate date];//获取本地时间。获取昨天的日期:NSDate * yesterday = [[NSCalendarDate date] dateByAddingInternalInterval:-24*60*60];获取指定时间:NSDate * nationalDate = [NSDate dateWithString:"2012-10-01 00:00:00 +0800"];还有一个使用指定格式的时 阅读全文
posted @ 2012-03-13 15:23 一十一王 阅读(1578) 评论(0) 推荐(0) 编辑

摘要: oc中内存管理的三项原则:1. 谁创建(new 或者 alloc),谁release。2. 如果你从一个方法中获得一个对象,应该假设这个对象的retaincount是1,而且已经被设置为autorelease,你不需要,也不应该release它。如果需要进一步传递这个对象,你可以进行retain或者copy操作。3. 如果你retain了一个对象,你必须负责release它。另外再补充一下。仔细查阅了release方法的定义,它被定义为oneway。这个关键字的意思是方法的调用不需要返回任何消息,方法的返回也不保证方法已经执行完毕。也就是说,当你调用了[obj release]之后,reta. 阅读全文
posted @ 2012-03-13 10:32 一十一王 阅读(415) 评论(0) 推荐(0) 编辑

摘要: objective-c中提供了很好的类型判断以及反射机制。oc的基础是c语言,所有的对象都使用指针来表示。一个指针的传递过程中可能模糊掉其实际的类型信息。通过类型查询可以帮助解决很多编程过程中的问题。另外,oc中的方法调用是基于消息的。查询某个类型是否包含一个消息的响应也是一个常用的功能。例如,在进行http网络通信过程中,获得一个NSURLRequest对象。在需要进行头部信息写入的时候需要查询它是否是mutableRequest:if([req isMemberOfClass:[NSMutableURLRequest class]])或者if([req isKindOfClass:[NS. 阅读全文
posted @ 2012-03-13 10:22 一十一王 阅读(1131) 评论(0) 推荐(0) 编辑