随笔分类 - Object-c
摘要:单例模式只能修改无法释放,直到程序结束。我们下面一步一步来做一个单例模式程序(1)单例一旦创建,是永远存在于内存中的,所以需要创建一个全局量static MySingletonClass *sharedSingleTonObj=nil;(2)既然是单例,一定有一个构造方法直接忽略跳过实例对象的生成过程。据此看来“类方法”最合适不过了+(MySingletonClass *)sharedSingleton{ //多线程安全的关键字,相关概念可以参考多线程编程章节 @synchronized(self) { //创建 if(share...
阅读全文
摘要:代理是Object-C中的一个重要机制,他可以将面向对象编程的封装特性进一步加强,不是自己负责的事情坚决不做,而是转而让对应的事情负责人(代理)去做。相反如果是自己需要负责的事情(作为别人的代理),会抢着去做。代理的引入真正意义上完全实现MVC的程序结构框架。协议是对类的实现进行规约的一套标准,可以保证多个承诺实现协议的类的接口一致性。比如协议中定义了一个接口X,那承诺执行这个协议的类,就需要实现这个接口X.协议的关键性是让大家都有法可依有据可查。Object-C中很多时候,协议和代理是一起出现一起使用的,我们可以通过协议和代理来进行类与类之间的通信和交流。抽象的描述,如果类A是类B的代理,那
阅读全文
摘要:1.内存的创建和释放 让我们以Object-c世界中最最简单的申请内存方式展开,谈谈关于一个对象的生命周期。首先创建一个对象://“ClassName”是任何你想写的类名,比如NSString NSArray等一切随意id testObject = [[ClassName alloc] init];注: alloc 是object-c 中常用来申请内存块的方式此时,对于对象“testObject”来说,他的引用计数就是1了,原因就是他调用了alloc来创建了一块只属于他的内存,这样对象的引用计数就得+1. 另外,Object-c中的另两个关键字retain和copy也会将对象的引用计数+1..
阅读全文
摘要:Object-c 中的block就好像一段C函数般,由函数名,有返回值,有参数,由函数体等1.简单的block1 ^(int A ,int B)2 {3 int C=A*B;4 return C;5 };上述代码表示block有两个整形参数A和B.在block体中进行A和B的相乘,将结果作为block的返回值返回出去。2.将block作为参数的API 在程序开发时,当需要一个NSArray对象的所有元素进行遍历时,除了for循环,开发者可以使用block进行遍历,代码如下:1 NSArray *arrChar=[@"A/B/C/D/E/F" c...
阅读全文
摘要:KVO(key-value Observer),通过命名可以联想到,一个监视着监视着键值配对,让一个对象A来监视另一个对象B中的键值,一旦B中的受监视键所对应的值发生了变化,对象A会进入一个回调函数,有机会对于B中的受监视键值的改变立刻进行处理和应对。 注:虽然对象A中的回调函数有点像代理方法,但是回调函数的调用和键值发生变化处在同一个线程中,并非像某些代理方法会在另一个线程中进行回调。也就是说,如果对键key进行了监视,一旦键key对应的值发生了变化,就会去调用监视着的回调函数,直到回调函数跑完后键key对应值发生变化的流程才能继续。 好处就是减少胶水代码。 比如比赛比分发生了变化...
阅读全文
摘要:如果我们的对象需要使用KVC,必须符合object-c的非正式协议NSKeyValueCoding.我们可以简单的来理解KVC,即所有符合KVC机制的对象都看成一个字典(NSDictionary),对象里面的成员量都是以键值配对的形式存放的,当我们需要为对象存值时,使用“setValue: froKey:”的方法;而当取对象时,使用valueForKey:的方法。 对于对象中成员量的键值配对,所谓的“键”其实是NSString类型的字符串,他们所对应的值也都是一个id类型的对象。 定义一个足球运动员类@interface footballer : NSObject@property (...
阅读全文
浙公网安备 33010602011771号