A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

@import “学习笔记14-内存管理(一)”
8     @property参数
格式 @property (参数1,参数2) 数据类型 方法名
  
参数类别
  
参数
说明
原子性
atmoic
对属性加锁  默认值
noatmoic
对属性不加锁
读写属性
readwrite
生成get和set方法  默认值
readonly
只生成get方法
Set方法处理
assign
适用基本类型,直接赋值  默认
retain
适用对象  先release旧值 后retain新值
copy
适用对象release旧值 后copy新值
   
注意
创建的成员变量为对象类型时 必须重写dealloc方法 释放对象类型。
set和get方法的名称
修改BOOL类型变量的set和get名称
例 BOOL  vip;
在@property (nonatomic,assign,setter = isVip)  BOOL vip;
本来生成的方法名为  setVip 修改之后之后为 isVip。
9  @class的使用
         使用方式
              @class  类名
          含义是:告诉编译器 这是一个类,至于类中有哪些属性和方法,此处不去检测。
          好处:引入类 发生了改变 不需要重新编译。  
          坏处:只是告诉编译器有哪些属性,没有哪些方法  需要在.m文件导入头文件。
          编译器编译的时候只编译头文件,在运行的时候才重新编译.m文件。
      可以解决循环引用的问题。
              A引用B  B 引用A  使用#import会报错使用@class 不会
10 循环retain
栈区的指针释放之后 两个对象还在互相指向对方 谁都无法释放。
解决方法:其中一个对象多 release 一次。
                 一个变量声明的时候用retain 一个用assign
  11 自动释放池
              特殊的栈结构
       特点:对象可以加入自动释放池中,自动释放池结束的时候会给池中的对象发送一条release消息。
       好处:不需要关心对象释放的时间  不需要关系什么时候释放对象
1)    创建自动释放池
@autoreleasepool{
      
             [对象  autorelease];//将对象加入自动释放池
}
注意
1) 对象只有加入到自动释放池,才会有自动释放的效果
2) 只能在自动释放池的代码内加入
3) 对象的生成可以在释放池之前或者释放池内
4) 多次调用 autorelease 会登记多次  释放的时候也会释放release多次。
5) 由于栈结构的特点,释放池中不适合放空间太大的对象
6) 释放延迟了对象的生命周期
                     
快速创建对象
在类用创建类方法 在类方法中完成创建对象并且将对象加入到释放池
例 在Person类中加入快速创建对方法(类方法)
        + (insanetype) person{
              //创建对象返回  并且将对象加入到释放池
              return  [ [ [self alloc] init ] release];  //子类也可以调用此方法
}
12  ARC
           特性:对 retain release和autorelease   say goodbye
           原理:编译器会自动在合适的位置加入 retain release和autorelease。
          指针的分类
                  强指针:默认都是强指针 关键字 strong
                     弱指针:
              判断准则
对象只要没有强指针指向 就会被释放,如果只有弱指针指向会将指针指向nil。
              多个对象内存管理
可以在定义变量时候 参数中加入对象指针修饰符(strong weak)而不能使用retain。
              ARC下解决循环引用的问题
                     将一个类对象设置为强指针,另一个设置为弱指针。
              ARC下@property参数
                     strong相当于MRC 中的 retain  weak相当于 MRC中assign。assign不变。
              注意
1) 不容许使用retain release和autorelease
2) 可以重写dealloc 但是不能调用 [super dealloc]
3) @property的转变。
ARC模式下兼容非ARC的类
       将编译的源文件 设置为  -foo-objc-arc
MRC转换ARC
       Xcdoe edit-Refactor- convert to  OC ARC

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马