property参数讲解

一、property作用:

     1、自动生成私有属性

     2、自动生成这个属性的getter和setter方法的声明;

     3、自动生成这个属性的getter和setter方法的实现;

     注意:生成的setter方法的实现中,无论是什么类型,都是直接赋值

二、property参数:

     1、property是可以带参数的  @property(参数一,参数二...);

     2、property四组参数;

          

(1)与多线程c相关的两个参数。

          atomic、nonatomic

          atomic:默认值,如果写atomic,这个时候生成的setter方法的代码就会加上一把安全锁

               特点:安全,效率较低

          nonatomic:这个时候生成的setter方法的代码就不会加安全锁,效率高

               特点:不安全,效率高

     (2)与生成setter方法实现相关的参数。

          assign、retain

          assign:默认值,生成的setter方法的实现就是直接赋值;

          retain:生成的setter方法的实现 就是标准的MRC内存管理代码,

                 也就是,先判断新旧对象是否为同一个对象;

                 如果不是就release,如果是就使用 ratain

          当属性的类型是OC对象类型的时候,就使用retain;

          当属性的类型是非OC对象类型的时候,就使用assign;

          注意:

          retain参数,只是生成标准的setter方法为标准的MRC内存管理代码,不会自动的在dealloc中生成relase的代码

          所以,还要我们自己手动的在dealloc中release;

 

     (3)与生成只读、读写相关的参数

          readonyly.readwriter

          readwriter:默认值,同时生成getter setter方法

          readonly:只会生成getter不会生成seeter方法

 

 

  

     (4)与生成的getter setter方法名字相关的参数

          getter  setter

         默认情况下:@propterty生成的getter和setter方法是最标准的

         其实可以通过参数来制定@property生成的方法名

         getter=ageGet用来指定get方法的名字

         setter=ageSet:用来指定set方法的名字,后面必须加:冒号;

         如果使用getter setter修改了生成f方法的名字。

         如果在使用点语法的时候,编译器转化为修改后的名字的代码

         使用场景:如果使用Boolear的时候,未了增加代码的可读性,可以加上is开头

       

        总结:

        1.与多线程相关的参数用nonatomic    默认natomic

        2.于生成的setter方法相关的参数,      默认assign;

           属性的类型是OC对象 使用 retain

           属性的类型是非OC对象 使用assign

           retain参数,只是生成标准的setter方法为标准的MRC内存管理代码,不会自动的在dealloc中生成relase的代码

          所以,还要我们自己手动的在dealloc中release;

       3.只读,读写

          如果希望生成的封装是只读封装使用readonly

          如果希望读写封装,使用readwriter;  默认值

       4.无论什么情况都不要改setter

          如果使用Boolear的时候,未了增加代码的可读性,可以加上is开头

     

       总结:

           属性的类型是OC对象 使用 retain(默认)

           属性的类型是非OC对象 使用assign

           UI控件使用UIImageView (weak)

           字符串NSString用: (copy)

           BOOL用:@property(nonatomic,assign,getter=isVip) BOOL vip;

           NSIntager等非OC用:@property(nonatomic,assign) NSIntager number

           NSArray和模型Bean 用(strong)

 

 

              

posted @ 2021-03-17 16:36  张亚楠  阅读(786)  评论(0编辑  收藏  举报