OC04_属性

新建一个Person类
Person.h

@interface Person : NSObject

属性 property
声明 getter 和 setter 方法.
关键字     类型      属性名
@property NSString *name;
@property NSString *sex;
@property NSInteger age;
@property NSString *hobby;



属性(property)的特性
1.读写性
(1). readonly 只读,只声明一个Getter方法.
@property(readonly) NSString *name;
(2). readwhite(系统默认)可读可写,生命了setter 和getter.
@property(readwrite) NSString *sex;
(3). 在属性中写setter和getter时,注意setter后有冒号,对比标准的setter和getter来理解.
@property(getter=quZhi, setter=fuZhi:)NSInteger age;
这句话的意思是,将原本age的getter和setter方法重新取了两个名字,因为setter方法是设置器,声明和实现该方法时是需要给参数的,所以要带有冒号.

2.原子性(线程安全)
(1). atomic 原子性(系统默认),提供线程加锁和解锁安全.
@property(atomic) NSString *name;
(2). nonatomic 非原子性(常用方法),不需要加锁和解锁.
@property(nonatomic) NSString *sex;

3.语义特性(内存优化)
(1). assign 分配,非对象(系统默认),适用于基本数据类型.
@property(assign) NSUInteger age;
(2). retain 持有,所有对象,适用于对象类型.
@property(retain) NSString *name;
(3). copy 拷贝,符合某些特殊条件的对象.
@property(copy) NSString *sex;



属性常见的例子
@property(nonatomic, retain) NSString *name;
@property(nonatomic, assign) NSUInteger age;
@property(nonatomic, retain) NSString *sex;

@end

Person.m

@implementation Person

属性的实现.
可以不写.
 关键字      属性名 = 成员变量(给属性指定操作的成员变量)
@synthesize name = _name;
@synthesize sex = _sex;
@synthesize age = _age;
@synthesize hobby = _hobby;


#pragma mark - Setter & Getter

属性不允许同时重写setter和getter方法,因为属性本身就带有setter和getter方法,否则会报错.
如果就是想让属性和setter & getter 共存, 解决办法有两种:
1. @synthesize, 将属性的实现写出来.
2. 在”.h"文件中声明成员变量(实例变量).

// 属性中的getter和setter方法.
- (NSInteger)age {
    return _age;
}

- (void)setAge:(NSInteger)age {
    _age = age;
}

// 将上面的getter和setter方法重命名,功能不变.
- (NSInteger)quZhi {
    return _age;
}

- (void)fuZhi:(NSInteger)age {
    _age = age;
}

main.m

如果只有设置器setter,没有访问器getter,在主函数中可以使用点语法,但是无法获得.
如果只有访问器getter,没有设置器setter,在主函数中不可以使用点语法,也就是无法读取.
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值