@property、@sythesize以及Ivar和@dynamic讲解(下)
下面仅仅是一些基本知识,可能有些知识用的比较少,不过知道怎么使用或者了解这个知识,还是不错的,毕竟技多不压身嘛!读完这篇文章大约需要5-10分钟左右!!!
一、@property
1、在头文件中:
@property int count;
面对上面的一行代码
- (int)count; -(void)setCount:(int)newCount;
通过@property int count ;这样定义完成之后,我们就可以使用这个属性啦,而且这个属性就会自动有setter和getter方法。
例如:
@property NSString *userName;
第一步生成_userName属性
第二步为_userName属性自动生成set/get方法啦!!!
>>>>>Problem @property 增强
问题1:使用property增强后,什么时候要重写getter/setter方法?
(1).使用property增强,只会生成最简单的getter/setter方法的声明和实现,并不会对传入的数据进行过滤。
(2).如果想对数据进行过滤,那么我们就必须重写getter/setter方法。
问题2:重写getter/setter方法有哪些注意点?
(1)如果重写了setter方法,那么property就只会生成getter方法
(2)如果重写了getter方法,那么property就只会生成setter方法
(3)如果同时重写了getter/setter方法,那么property就不会自动帮我们生成私有的成员变量(带_的成员变量)
二、@synthesize
#import <Foundation/Foundation.h> #import "User.h" //有时候我们不想定义属性为_开头的 //这时候我们就可以使用@synthesize,来修改我们想要的属性名 //这时候属性_userName变成了$userName @implementation User @synthesize userName = $userName; @end
因为我们使用@property定义属性之后,如果我们想修改这个属性的名称,我们可以使用@synthesize关键字来对名称进行修改。
>>>>>>注意点:
@synthesize age;代表:
(1).setter和getter实现中会访问@synthesize后同名成员变量age
(2).如果成员变量age不存在,就会自动生成一个@private的成员变量age
三、Ivar(成员变量)
Ivar可以理解为类中的一个变量,主要作用是用来保存数据的。@property可以说@property = Ivar + setter + getter
>>>>lvar 用的并不是特别多,大家用的时候也不会太在意这个
@dynamic和@synthesize的异同
a. 通过@synthesize 指令告诉编译器在编译期间产生getter/setter方法
b. 通过@dynamic指令,告诉编译器,属性的 setter 与 getter 方法由用户自己实现,不会自动生成,如果没有自动生成在运行时调用会crash
c. 有的存取是在运行时动态创建的,如在CoreData的NSManagedObject类使用的某些。如果你想这些情况下,声明和使用这些属性,但要避免缺少方法在编译时的警告,你可以使用@dynamic动态指令,而不是@synthesize合成指令