码迷,mamicode.com
首页 > 其他好文 > 详细

多内存管理

时间:2015-05-16 23:18:51      阅读:172      评论:0      收藏:0      [点我收藏+]

标签:

1.有alloc,new,copy创建出来的对象就必须有release,在类中是retain对oc类型对成员在该类对dealloc方法中也要release

2.一旦对象直接有引用关系,那么就一定有retain,同时在主对象销毁时,也必须对其引用对对象release。但是对象引用时,在retain时

    注意是否引用对时同一个对象,若是不同对象就得先release旧对象,再retain新对象

代码:

-(void)setDog:Dog dog

  if(dog!=_dog)

  {

    [_dog release];

    [dog ratain];

    _dog=dog;

  }

举例:一个人买了一辆车,那么现在这个人拥有了这辆车,也就是车的retain一次,当这个人买了新车了,那么之前那辆车就和这个人没有关系了

        那么就的release一次旧车,然后再retain一次新车,若这辆车没有换,那么就不做任何操作。如果人挂了的话,这辆车就会可能给别人,所

        以,必须再人挂的时候,将车release一次,相当于解除了这个人和这辆车的关系了

3.@property关键字,用于简化我们频繁的写set,get的代码,他将会自动生产对于的方法,和字段(都是有一定的命名规范的,setXx ,xx,_xx)

   @property的参数:

       a.set方法内存管理的参数(各参数不能同时有)

          retain:会自动release旧对象,retain新对象,适用于oc类型对象,如2代码

          assign:直接赋值给对象成员,适用于非oc类型的对象

      copy:release旧值,copy新值

   b.是否生成set方法  (各参数不能同时有)

      readwrite:可读可写,即set和get方法都会生成

      readonly:只读,只生成get方法

      c.多线程管理(各参数不能同时有)

    nonatomic:性能高,通常都是用该参数

        atomic:性能低,默认的参数

      d.setter和getter重设方法的名称

    setter:给set方法重命名,但是必须有冒号 ‘ : ‘

    getter:给get方法重命名,一般用在bool类型的属性上

eg。 @property (nonatomic,readwrite,assign,setter=abc: )  int age

       @property (nonatomic,retain) Dog dog

  当用了setter或getter重命名方法时,再使用该对象时可以直接用  对象.成员名称 来取值或赋值,工具会自动检测时再用get还是

  set方法的

4.@class 关键字:声明一个类,但是没有类里的实现,仅仅时做一个声明,给编译器看的,再运行的时候才去找实现

    代替的import导入文件

    使用的好处:解决里两个类互相引用的问题(import时不能互相导入的)

        提高类程序的性能(用import的话,每次被导入的文件被改动,都会重新复制一份到当前类中,消耗性能,而class不用管)

5.当两个类互相引用时,再各自当dealloc方法中就必须对引用对对象release一次,这样就导致两个对象被咬死,无法释放内存,

 解决方案:再其中任意一个类中,将引用另一个类对熟悉对property参数写成assign

多内存管理

标签:

原文地址:http://www.cnblogs.com/hui1107464497/p/4508787.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!