• oc基础-oc中的内存管理arc


     

    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

  • 相关阅读:
    DripRoad(点滴之路)
    如何写优雅的代码
    .Net 一直在改变
    Protobufnet的完美解决方案
    关于msgpack序列化后的消息包是否再压缩
    失眠
    创建一个比微软性能更好空间更少的GUID
    msgpack与protobuf的简单性能测试对比
    分布式游戏服务器的登陆流程
    对象池的实现与性能测试
  • 原文地址:https://www.cnblogs.com/hui1107464497/p/4508787.html
Copyright © 2020-2023  润新知