• OC点语法介绍和使用以及@property关键字


    使用"点语法"

    Person *p =[Person new];
    
    //点语法
    //对象.属性名
    //注意,此时 (p.age)并不是直接方法实例对象
    //而是xcode可能到点语法(p.age)后,会帮我们自动替换
    //p.age --替换--->[p setAge:18]
    p.age=18;
    
    //注意.此处 p.age出现在了等号的右侧
    //设计上,当xcode 看到了p.age出行在等号的右侧后
    //它会帮我们把p.age---替换成--->[p age];
    int a= p.age;
    NSString *s =[p name];
    

      

    @property

    @property是编译器的指令
    编译器指令: 就是告诉编译器要作什么
    @property 告诉编译器  声明属性的访问器(getter/setter)方法
    
    好处:免去我们手工书写get和set方法繁琐的代码
    

      

    @property用法

    格式:
    @property 类型名 实例变量名

      

    用法:

    1 1.在xcode4.4 之前,用于帮我们实现get/set方法的声明
    2 2.在xcode 4.4之后,有稍微增强

      

    使用注意:

     1 1.@property只能写在@interface @end中
     2 2.@property 用来自动生成成员变量的 get/set方法声明(xcode4.4 以前)
     3 告诉property要生成的get/set 方法声明的成员变量类型是什么
     4 告诉property要生成的get/set 方法是哪个属性的,属性名称去掉下划线
     5 
     6     如果写成了 @property int _age;
     7                   Person *p =[Person new];
     8                     p.age 就拿不到了
     9                     p._age;
    10  

      

    @property 增强使用

    1   Xcode4.4版本以后支持的
    2   只使用 @property进行声明,类会自动帮你实现
    3   操作的是带有下划线的实例变量
    4 
    5   如果没有手动声明成员变量,property会在.m文件中自动帮我们生成一个_开头的成员变量
    6 
    7   注意; 这个实例的生成与.m文件 是私有不能被子类使用的
    8       get和set方法在.m中可以自己手动实现,但是当用增强时,get 、set只能手动实现一个

    @property参数

     1  格式:
     2   @property(参数1,参数2) 数据类型 方法名
     3  参数类型      参数        说明
     4  原子性      atomic        对属性加锁,多线程下线程安全,默认值
     5           nonatomic      对属性不加锁,多线程下不安全,但是速度块
     6  读写属性      readwrite      生成getter、setter ,默认值
     7            readonly       只生成getter方法
     8  方法处理     assign        直接赋值,默认值
     9           retain        先release原来的值,再retain新增
    10           copy          先release原来的值,再copy新增
    11 
    12 
    13   @property(assign) int age;
    14   int _age;
    15   -(void)setAge:(int)age{
    16     _age = age;
    17   }
    18 
    19   @property (retain) Car * car;
    20   Car _car;
    21   -(void)setCar:(Car)car{
    22     if(_car!=car){
    23       [_car release];
    24       _car =[car retain];
    25     }
    26   }
    27 
    28 1)内存管理相关参数
    29   retain:对对象release旧值,retain新值 (适用于OC对象类型)
    30   assign:直接赋值(默认,适用于非oc对象类型);
    31   copy : release旧值,copy新值
    32 
    33   @property ( nonatomic,assign) Car *car;
    34 
    35     例如:在color的get set方法中修改age的值
    36   @property(nonatomic,setter=setColor:,getter=color) int age;

      

  • 相关阅读:
    Scott Mitchell 的ASP.NET 2.0数据教程
    asp.net单点登录 一个账号只能在一个地方登录
    javascript关键字加亮加连接
    Windows环境变量
    IE支持HTML5的解决方法
    JavaScript test() 方法及判断是否为iPhone|iPad|iPod
    《C#4.0中文视频教程共20课完整版》下载
    DataView.RowFilter 的使用
    SQL Server中如何备份到异机
    完美兼容IE、FF、Opera的Ajax类支持get、post、自定义回调函数
  • 原文地址:https://www.cnblogs.com/developer-wang/p/4500412.html
Copyright © 2020-2023  润新知