19-oc@property和@synthesize

Posted wc&Home

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了19-oc@property和@synthesize相关的知识,希望对你有一定的参考价值。

 

@porperty

@porperty是一个编译器指令

 

在Xocde4.4之前, 可以使用@porperty来代替getter/setter方法的声明, 也就是说我们只需要写上@porperty就不用写getter/setter方法的声明

 

2.编译器只要看到@property,就知道我们要生成某一个属性的getter/setter方法的声明

 

@propertyde格式

@property数据类型变量名

 


property增强

 

从Xcode4.4以后,对@property进行了增强, 以后只要利用一个@property就可以同时生成setter/getter方法的声明和实现

 

如果没有告诉@property要将传入的参数赋值给谁, 默认@property会将传入的属性赋值给_开头的成员变量

 

@property的使用场景

如果不想对传入的数据进行过滤, 仅仅是提供方法给外界操作成员变量, 那么就可以使用@property ,并且系统会自动给我们生成一个_开头的成员变量

 

使用property增强后,什么时候要重写getter/setter方法

使用property增强,只会生成最简单的getter/setter方法的声明和实现, 并不会对传入的数据进行过滤

 

如果想对传入的数据进行过滤, 那么我们就必须重写getter/setter方法

 

重写getter/setter方法有哪些注意点

如果重写了setter方法, 那么property就只会生成getter方法

如果重写了getter方法, 那么property就只会生成setter方法

如果同时重写了getter/setter方法, 那么property就不会自动帮我们生成私有的成员变量

 


 

@property修饰符

增强@property使用修饰符后的的格式

 格式:

@property(属性修饰符) 数据类型变量名称;

 

@property 有哪些修饰符?各有什么作用?

1.readwrite: 代表既生成getter方法 , 也生成setter方法

默认情况下@property就是readwrite的

@property(readwrite) int age;

2.readonly: 代表只生成getter方法不生成setter方法

@property(readonly) NSString * name;

3.给getter方法起了一个别名为abc

- (void)setHeight:(double)height;

- (double)height;

给getter方法起了一个别名为abc

- (void)setHeight:(double)height;

- (double)abc;

@property(getter=abc) double height;

4.给setter方法起了一个别名为tiZhong

- (void)setWeight:(double)weight;

- (void)tiZhong:(double)weight;

@property(setter=tiZhong:) double weight;

程序员之间有一个约定, 一般情况下获取BOOL类型的属性的值, 我们都会将获取的方法名称改为isXXX

@property(getter=isMarried) BOOL married;

 


 

@synthesize

synthesize是一个编译器指令, 它可以简化我们getter/setter方法的实现

@synthesize age = _age; 在给age赋值时,编译器做了哪些事

 

@synthesize age = _age;

1.在@synthesize后面的age,告诉编译器, 需要实现哪个@property生成的声明

 

2.告诉@synthesize, 需要将传入的值赋值给谁和返回谁的值给调用者

 

如果在@synthesize后面没有告诉系统将传入的值赋值给谁, 系统默认会赋值给和@synthesize后面写得名称相同的成员变量@synthesize age;


 

以上是关于19-oc@property和@synthesize的主要内容,如果未能解决你的问题,请参考以下文章

单击按钮导航到root viewcontroller

& 和 && 区别和联系,| 和 || 区别和联系

第三十一节:扫盲并发和并行同步和异步进程和线程阻塞和非阻塞响应和吞吐等

shell中$()和 ` `${}${!}${#}$[] 和$(()),[ ] 和(( ))和 [[ ]]

Java基础8---面向对象代码块和继承和this和super和重写和重载和final

Java基础8---面向对象代码块和继承和this和super和重写和重载和final