Object_c基础——笔记整理2(干货)

来源:互联网 发布:知乎清华五道口 编辑:程序博客网 时间:2024/06/06 10:44


僵尸对象:所占用内存已经被回收的对象,僵尸对象不能再使用

野指针指向僵尸对象(不可用内存)的指针,给野指针发送消息会报错(EXC_BAD_ACCESS)

空指针没有指向任何东西的指针(存储的东西是nil、NULL、0),给空指针发送消息不会报错


XCODE6.1修改检测僵尸对象的路径:

xcode>product>scheme>edit scheme>Diagnostics


retain :计数器+1,会返回对象本身

release :计数器-1,没有返回值

retainCount :获取当前的计数器

dealloc:当一个对象要被回收的时候,就会调用dealloc方法

    一定要调用[super dealloc],这句调用要放在最后面



set方法内存管理相关的参数

 retain :release旧值,retain新值(适用于OC对象类型)

 assign : 直接赋值(默认,适用于非OC对象类型)

 copy   : release旧值,copy新值


是否要生成set方法

 readwrite : 同时生成setter和getter的声明、实现(默认)

 readonly : 只会生成getter的声明、实现


多线程管理

nonatomic : 性能高 (一般情况都使用此选项)

atomic   : 性能低(默认)


setter和getter方法的名称

setter : 决定了set方法的名称,一定要有个冒号 :

getter : 决定了get方法的名称(一般用在BOOL类型)


// 返回BOOL类型的方法名一般以is开头

@property (getter = isExist) BOOL exist;  // 是否存在

 

@class

作用:仅仅告诉编译器,某个名称是一个类

@class Person; // 仅仅告诉编译器,Person是一个类

 

开发中引用一个类的规范

 1:在.h文件中用@class来声明需要引用的类

 2:在.m文件中用#import来包含类的所有东西


两端循环引用解决方案

 1:一端用retain

 2:一端用assign

 

ARC

判断准则:只要没有强指针指向对象,就会释放对象

特点:

1:不允许调用release、retain、retainCount

2:允许重写dealloc,但是不允许调用[super dealloc]

3:@property的参数:

  * strong :成员变量是强指针(适用于OC对象类型)

  * weak :成员变量是弱指针(适用于OC对象类型)

  * assign : 适用于非OC对象类型


强指针:默认情况下,所有的指针都是强指针 __strong

弱指针:__weak


// 错误写法(没有意义的写法)

__weak Person *p = [[Person alloc] init];

 因为弱指针p指向一个Person对象,该

Person对象一创建就会被释放

 当两端循环引用的时候,解决方案:

ARC下:

 1端用strong,另1端用weak

 

非ARC下:

 1端用retain,另1端用assign



0 0
原创粉丝点击