Objective-C中的@property
1:@property 是什么?
在Objective-C中,@property 是声明属性的语法,它可以快速方便的为实例变量创建getter/setter方法。
2:@property 的本质?
@property = ivar + setter + getter,实际上就是实例变量 + getter方法 + setter方法。
3:@property 的作用?
@property(属性)作为Objective-C 的一个特性,主要作用就是封装对象中的数据。Objective-C中的实例变量通常是通过 getter/setter 方法来访问。针对对象中某个给定名称的实例变量,编译器会自动的生成 getter/setter 方法。
在工作中通常会如下使用@property:
@interface Car : NSObject @property (nonatomic, copy) NSString *carName;
@property (nonatomic, copy) NSString *carType; @end
上面的代码和下面的代码是等价的:
@interface Car : NSObject
{
// 声明两个实例变量
NSString *carName;
NSString *carType;
} - (void)setCarName:(NSString *)carName;
- (NSString *)carName; - (void)setCarType:(NSString *)carType;
- (NSString *)carType; @end
可见:声明一个实例变量,并声明实现该变量的存取方法,效果和@property 是一样的。
4:使用@property,ivar、getter、setter是如何生成并添加到类中的?
在使用@property 声明完属性后,编译器就会自动的生成实例变量,和该实例变量的存取方法。这个过程叫做自动合成(autosynthesis)。该过程是在编译期完成的,因此在编译器中是看不到存取方法的源代码的。
5:@property 生成实例变量的名称是什么?
如果没有使用 @synthesize 指定实例变量的名字,使用@property 默认生成的实例变量的名称是下划线+属性名。例如上面的代码中:
@property (nonatomic, copy) NSString *carName;
@property (nonatomic, copy) NSString *carType;
在编译期间生成的实例变量名称分别是 _carName、_carType,在程序中可以直接使用_carName、_carType。
可以使用 @synthesize 来指定实例变量的名称,如下:
@synthesize carName = myCarName;
@synthesize carType = myCarType;
这样,程序中的生成的两个实例变量名称分别是 myCarName、myCarType,可以直接使用。
倘若使用了@synthesize,但是没有指定实例变量名称,如下:
@synthesize carName,carType;
这种情况下,程序中生成的两个实例变量名称分别是 carName、carType,可以直接使用。
Objective-C中的@property的更多相关文章
- objective c, category 和 protocol 中添加property
property的本质是实例变量 + getter 和 setter 方法 category和protocol可以添加方法 category 和 protocol中可以添加@property 关键字 ...
- OC中的@property详解
简介: @property 生成了变量的get set 方法,同时指定了变量名称. 例如@property (nonatomic,strong) NSString *name;表示生成了_name私有 ...
- Objective-C中的@property和@synthesize用法
@代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与 ...
- JavaScript中的property和attribute
property,attribute都作“属性”解,但是attribute更强调区别于其他事物的特质/特性. 而在JavaScript中,property和attribute更是有明显的区别.众所周知 ...
- 理解Objective C 中id
什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...
- 浅谈Objective—C中的面向对象特性
Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...
- Objective-C中的@Property详解
Objective-C中的@Property详解 @Property (属性) class vairs 这个属性有nonatomic, strong, weak, retain, copy等等 我把它 ...
- Objective-C中的property
property可以被声明的位置 property可以在类的interface section和class extension以及protocol中被声明 property的可见性 Objective ...
- Objective-C中的@Property具体解释
Objective-C中的@Property具体解释 @Property (属性) class vairs 这个属性有nonatomic. strong. weak, retain. copy等等 我 ...
随机推荐
- uva1639 Candy
组合数,对数. 这道题要用到20w的组合数,如果直接相乘的话,会丢失很多精度,所以用去对数的方式实现. 注意指数,因为取完一次后,还要再取一次才能发现取完,所以是(n+1)次方. double 会爆掉 ...
- 面向函数范式编程(Functional programming)
函数编程(简称FP)不只代指Haskell Scala等之类的语言,还表示一种编程思维,软件思考方式,也称面向函数编程. 编程的本质是组合,组合的本质是范畴Category,而范畴是函数的组合. 首先 ...
- SelectSingleNode和SelectNodes区别
SelectSingleNode:选择匹配 XPath 表达式的第一个 XmlNodeSelectNodes:选择匹配 XPath 表达式的结点集合 XmlNodeList
- RTP协议分析
目录(?)[-] 第1章 RTP概述 RTP是什么 RTP的应用环境 相关概念 流媒体 第2章 RTP详解 RTP的协议层次 传输层的子层 应用层的一部分 RTP的封装 RTCP的 ...
- WebView 中重写javascript 常用函数
常规函数 javascript 常规函数包括以下3个函数: (1)alert函数:显示一个警告对话框,包括一个OK按钮. 对应:http://www.dreamdu.com/javascript ...
- Spring AOP (上)
工作忙,时间紧,不过事情再多,学习是必须的.记得以前的部门老大说过:“开发人员不可能一天到晚只有工作,肯定是需要自我学习.第一:为了更充实自己,保持进步状态.第二:为了提升技术,提高开发能力.第三:保 ...
- CMake实践(2)
一,本期目标: [~@localhost t2]$ cat README this is README├── CMakeLists.txt├── COPYRIGHT├── doc│ └── hel ...
- [Papers]NSE, $\pi$, Lorentz space [Suzuki, NA, 2012]
$$\bex \sen{\pi}_{L^{s,\infty}(0,T;L^{q,\infty}(\bbR^3))} \leq \ve_*, \eex$$ with $$\bex \frac{2}{s} ...
- Storm实战常见问题及解决方案
该文档为实实在在的原创文档,转载请注明: http://blog.sina.com.cn/s/blog_8c243ea30101k0k1.html 类型 详细 备注 该文档是群里几个朋友在storm实 ...
- bjfu1235 两圆公共面积
给定两个圆,求其覆盖的面积,其实也就是求其公共面积(然后用两圆面积和减去此值即得最后结果). 我一开始是用计算几何的方法做的,结果始终不过.代码如下: /* * Author : ben */ #in ...