属性、点语法

一、属性
  什么是属性?
  属性是Objective-C 2.0定义的语法,提供setter、getter方法的默认实现。在一定程度上简化程序代码,并且提高程序的安全性。
  属性的定义:
  属性的声明:在.h文件中使用@property声明属性。
  以实例变量_name为例:
  @property (nonatomic, copy) NSString *name;
  相当于在@interface中声明了两个方法:

//setter方法
- (void)setName:(NSString *)name;
//getter方法
- (NSString *)name;

  属性的实现:在.m文件使用@synthesize实现属性
  @synthesize name = _name;
  相当于在@implementation中实现了:

//setter方法
- (void)setName:(NSString *)name
{
    _name = name;
}
//getter方法
- (NSString *)name
{
    return _name;
}

  注:
  1. @synthesize可以省略,只使用@property声明属性即可。
  2. 通过等号右边的实例变量表示setter、 getter方法的实现内部到底与那个实例变量建立联系。
  3. 如果没有写@synthesize name = _name;这行代码,也没有声明一个实例变量叫_name。此时系统会自动生成一个实例变量叫_name。如果我们已经声明了一个实例变量叫_name,那么就用我们声明的。
  4. 如果写@synthesize name;系统会自动生成一个实例变量叫name并使用这个实例变量,此时name实例变量与外界我们自己生成的实例变量_name没有任何关系。
二、属性的特性
  1. 读写性控制:
  (1). readonly只读属性,默认只生成getter方法,不生成setter方法。
  (2). readwrite读写属性,既生成setter方法,也生成getter方法。属性的默认读写性控制就是readwrite。没有只写属性!
   (3). setter= 给属性对应的setter方法改名字。
   (4). getter= 给属性对应的getter方法改名字(当属性的类型是BOOL类型,可以考虑修改该属性的getter方法名为is + 属性名)。
   2. 原子性:
   (1). atomic原子性,在多线程访问下是线程安全的(加锁),但是对资源的消耗比较大。
   (2). nonatomic非原子性,在多线程访问下是线程不安全的,对资源的消耗比较小,是我们以后经常使用的。
   3. 语义特性:(assign,retain,copy)
   (1). 属性是非对象类型(如:int, float等)属性的语义设置使用assgin。
   (2). 属性是对象类型(如:NSString等)属性的语义设置使用retain。
   (3). 属性是对象类型并且想得到对象的副本,使用copy
   示例:
@property (nonatomic, setter=AAA:, getter=aaa, copy) NSString *gender;

三、点语法
  只要符合系统默认setter、getter书写格式的方法都可以使用点语法。
  示例:

//setter方法
[person setName:@"张三"];
//使用点语法
person.name = @"张三";

//getter方法
NSString *string = [person name];
//使用点语法
NSString *string = person.name;

  属性是一对getter、setter方法,点语法是属性的另一种调用格式。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值