OC - 属性点语法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OC - 属性点语法相关的知识,希望对你有一定的参考价值。
在OC中,为单一实例变量赋值的方法称为setter方法(设置器)
在OC中,读取实例变量值得方法称为getter方法(访问器)
OC里规定了setter、 getter方法的书写格式
setter方法的书写格式如下:
- (void)setAge:(NSInteger)age;
注意:set + 实例变量名(首字母大写),忽略下划线。
getter方法的书写格式如下:
- (NSInteger)age;
注意:返回值类型与变量类型一直,方法与实例变量名相同,忽略下划线
属性
/*
属性的声明:在.h文件中使用@property声明属性。
以实例变量_name为例
属性的声明
@property NSString *name;
或者
@property (nonatomicc, retain)NSString *name;
相当于在@interface中声明了两个方法:
setter 方法
- (void)setName:(NSString *)name;
getter方法
- (NSString *)name;
属性的实现,在.m文件中使用@synthesize实现属性
以实例变量_name为例:
属性的实现
@synthesize name = _name;
相当于在@implementation实现了
setter方法
- (void)setName:(NSString *)name {
_name = name;
}
getter 方法
- (NSString *)name {
return _name;
}
*/
在Xcode4.5以及以后的版本,@synthesize可以省略,只使用@property声明属性即可。
在默认情况下,当没有实现setter和getter方法时,通过@synthesize可以自动生成标准的setter和getter方法。
属性的作用是生成setter以及getter方法的实现,如果方法内部操作的实例变量未定义,系统会自动生成一个,_属性名的实例变量,但是生成的实例变量可见度是私有的,子类不可访问。
. 一旦同时重写了setter、 getter方法,并且没有实现@synthesize, @synthesize就不再生成实例变量
属性的特性:
1. 读写性控制(readonly. readwrite. setter=. getter=)
readonly:制度状态,是告诉编译器,属性只生成getter方法,不生成getter方法。
readwrite:读写状态,是告诉编译器,属性既生成setter方法又生成getter方法,既有设置器,也有访问器,默认读写特性
setter=: 指定属性生成的setter方法的名字
getter=:指定属性生成的getter方法的名字
2. 原子性控制(nonatomic. atomic)
atomic:原子特性,setter、 getter方法在多线程访问下绝对安全,即setter、 getter内部做了多线程访问处理,默认的原子特性。
nonatomic:非原子特性,setter、getter方法内部不会做多线程访问处理,仅仅是普通的setter。getter方法。
(声明属性时,通常使用nonatomic,某些属性需要线程安全的时候,才会定义为atomic)
3. 语义特性
语义设置(assign. retain. copy)
如果属性是非对象类型(比如int float等) 属性的语义设置使用assgin
如果属性是对象类型(比如NSString等)属性的语义设置使用retain.
如果属性是对象类型并且想得到对象的副本,使用copy。
以上是关于OC - 属性点语法的主要内容,如果未能解决你的问题,请参考以下文章