zoukankan      html  css  js  c++  java
  • 属性参数


    如何使用@property进行自动实现呢?答案就是使用属性参数,例如car属性的setter方法,可以通过@property定义如下:

    @property (nonatomic,retain) Car *car;
    你会发现此刻我们不必手动实现car的getter、setter方法程序仍然没有内存泄露。其实大家也应该都已经看到前面Person的name属性定义的时候我们同样加上了(nonatomic,copy)参数,这些参数到底是什么意思呢?

    propertyParameter

    @property的参数分为三类,也就是说参数最多可以有三个,中间用逗号分隔,每类参数可以从上表三类参数中人选一个。如果不进行设置或者只设置其中一类参数,程序会使用三类中的各个默认参数,默认参数:(atomic,readwrite,assign)

    一般情况下如果在多线程开发中一个属性可能会被两个及两个以上的线程同时访问,此时可以考虑atomic属性,否则建议使用nonatomic,不加锁,效率较高;readwirte方法会生成getter、setter两个方法,如果使用readonly则只生成getter方法;关于set方法处理需要特别说明,假设我们定义一个属性a,这里列出三种方式的生成代码:

    assign,用于基本数据类型

    -(void)setA:(int)a{
    _a=a;
    }
    retain,通常用于非字符串对象

    -(void)setA:(Car *)a{
    if(_a!=a){
    [_a release];
    _a=[a retain];
    }
    }
    copy,通常用于字符串对象

    -(void)setA:(NSString *)a{
    if(_a!=a){
    [_a release];
    _a=[a copy];
    }
    }

  • 相关阅读:
    VUE和支付
    酱油荷包蛋
    .NET CORE迁移踩坑
    文本超过控件长度自动显示省略号的css
    jquery综合
    123
    Java l ArrayList
    SQL|几种插入语句的区别
    Spark l Spark启启动时的Master参数是什么?
    【外】001-python3之zip函数
  • 原文地址:https://www.cnblogs.com/xiamo123/p/4754932.html
Copyright © 2011-2022 走看看