2014.12.11 oc基础复习

这一天主要学习了内存管理的部分,感觉稍显复杂,但只要遵循总的原则就不会错

谁声明,谁销毁,谁retain,谁release

1.在类的成员变量是oc对象时,set方法需要写内存管理如

-(void)setBook:(Book *)book{

    if( _book != book){

        [_book release];

        _book = [book retain];

     }

还要在调用这个set方法的类的dealloc方法中,加入[_book release]

在声明该对象成员变量的属性时,加入retain关键字,就可以代替上述内容

@propety 还有readonly,readwrite,assgin,retain,copy,atomic,nonatomic等关键字

atomic是原子性,即给该方法加上线程锁,在一个线程尚未执行完毕时不允许另外一个线程调用,耗费了系统安全,nonatomic即禁止了多线程

2.@class关键字 在对象与对象相互引用成员变量时使用,代替引入.h文件,提高了编译效率

3.autorelease延迟释放,使用autorelease声明时,会把该变量加入autoreleasepool的栈顶,等该池释放的时候,pool的所有变量都调用一次release方法,一般静态方法声明的变量都是autorelease,循环量比较大的语句不要加入autoreleasepool,而且在arc中模式中不能使用autorelease方法


下午

  1. category比较简单,为了不改变类的原有设计添加的方法集合,用类名(分类名)声明,类似于类的声明和实现,然后直接写方法的声明和实现即可

  2. protocool的思想,记住按钮监听器的那个例子即可。有两个方法值得注意conformstoprotocool和responsetoselector,来判断是否实现协议,对象是否实现了协议中的方法。@required和@optional关键字

  3. block语法实际上就是声明了一个函数指针,而且比函数更灵活,便于实现回调,语法格式为

    返回值类型 (^函数名)(参数名),block是一个变量

  4. 类的成员变量作用域为public时,用->访问

你可能感兴趣的:(多线程,关键字)