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 - 属性点语法的主要内容,如果未能解决你的问题,请参考以下文章

OC - 属性点语法

开始从oc转入swift的注意点

OC点语法和变量作用域

oc基础

OC中私有方法和私有变量

OC第四节 ——点语法和@property