摘要:
这个类很简单,基本上就是pushViewController和popViewController这样两个方法是常用的。 这里要讲的是可能很容易被忽略的。 首先,使用[UINavigationController alloc] initWithRootViewController:rootvc]. rootvc会在navigationController这样一个属性访问UINavigationCon... 阅读全文
摘要:
这个类很简单,基本上就是pushViewController和popViewController这样两个方法是常用的。 这里要讲的是可能很容易被忽略的。 首先,使用[UINavigationController alloc] initWithRootViewController:rootvc]. rootvc会在navigationController这样一个属性访问UINavigationCon... 阅读全文
摘要:
这篇总结懒得写了,直接转了网上的一篇文章:http://blog.csdn.net/favormm/article/details/6928432 首先看两个runloop的示例,来源: http://paste.lisp.org/display/86524 第一个: #includeCoreFoundation/CoreFoundation.h static void _perform( vo... 阅读全文
摘要:
写这一篇总结有些纠结。因为这是一个很大的题目,而我只是为了自己总结一下,没想长篇大论写教程。思来想去,还是写一个备忘录言简意赅吧。 从apple给出的开发指引来看,apple官方是不推荐使用自定义线程的,而是推荐使用block、NSOpration这样的方式进行异步调用。因为内部的实现保证了更好的资源管理。并且给出了创建线程的代价参考。Mac OS和iOS不仅需要为线程分配堆栈空间,而且还需要分配... 阅读全文
摘要:
学习到目前为止,我看到oc实现的序列化方式有两种:NSKeyedArchiver,NSPropertyListSerialization。在这两种序列化方式中,NSData都是序列化的目标。两种方式的不同点在于NSPropertyListSerialization只是针对字典类型的,而NSKeyedArchiver是针对对象的。(补充一下,在Mac OS环境下,还可以使用NSArchiver获得更加精简的二进制序列化内容,但是NSArchiver在iOS环境下不支持)。首先讲NSPropertyListSerialization,这个相对简单,只要创建一个NSDictionary,然后调用NS 阅读全文
摘要:
第七篇中讲动态属性时,提到了resolveInstanceMethod,这个方法不仅在这里用,还用来实现消息的转发。消息的转发就是向对象发送一个它本身并没有实现的消息,在运行时确定它实际产生的行为。举个例子来说,一个Person对象,在运行时根据实际情况,决定是否响应fly这样的方法。如果条件具备,则fly被响应。否则,则不具备这样的方法。类似于AoP的做法。要实现消息转发,需要覆盖三个方法:1, resolveInstanceMethod(可选),这个方法为你提供了一个机会,在消息被发现本身没有在类中定义时你可以通过class_addMethod将它添加进去。如果你不这样做,不管你最终返回Y 阅读全文
摘要:
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。 阅读全文
摘要:
后面主要介绍oc类的运行时行为。这里面包括运行时方法的更换,消息的转发,以及动态属性。这些对于面向方面编程AOP的热爱者还是很有用的,当然还有很多其他的作用,例如可配置编程之类的。但是按照我之前在java和dotnet的编程经验,这些都是使用性能为代价的。所以尽量在程序开始部分完成操作,而不是用于程序行为的代码。第一段代码是方法交换。下面的例子将使用自己的代码替换[NSString stringByAppendingPathComponent]方法的实现。这里是替换代码:NSString * NSStringstringByAppendingPathComponent(id SELF, SEL 阅读全文
摘要:
集合类型,常用的包括NSArray, NSDictionary. 以及用于遍历的NSEnumerator对象。创建不可变的数组对象:NSArray * ary = [NSArray arrayWithObjects:@"title", @"content", [NSNumber numberWithInt:2],nil];需要注意的是,NSArray中不能存储基本类型如float,int,double之类的,否则都会被设置为0。另一个,上面这个调用必须用nil来结尾,这也意味着NSArray中不能存储nil。对数组对象的遍历:NSEnumerator * 阅读全文
摘要:
获取当前日期: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"];还有一个使用指定格式的时 阅读全文
摘要:
oc中内存管理的三项原则:1. 谁创建(new 或者 alloc),谁release。2. 如果你从一个方法中获得一个对象,应该假设这个对象的retaincount是1,而且已经被设置为autorelease,你不需要,也不应该release它。如果需要进一步传递这个对象,你可以进行retain或者copy操作。3. 如果你retain了一个对象,你必须负责release它。另外再补充一下。仔细查阅了release方法的定义,它被定义为oneway。这个关键字的意思是方法的调用不需要返回任何消息,方法的返回也不保证方法已经执行完毕。也就是说,当你调用了[obj release]之后,reta. 阅读全文
|