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的更多相关文章

  1. objective c, category 和 protocol 中添加property

    property的本质是实例变量 + getter 和 setter 方法 category和protocol可以添加方法 category 和 protocol中可以添加@property 关键字 ...

  2. OC中的@property详解

    简介: @property 生成了变量的get set 方法,同时指定了变量名称. 例如@property (nonatomic,strong) NSString *name;表示生成了_name私有 ...

  3. Objective-C中的@property和@synthesize用法

    @代表“Objective-C”的标志,证明您正在使用Objective-C语言 Objective-C语言关键词,@property与@synthesize配对使用. 功能:让编译好器自动编写一个与 ...

  4. JavaScript中的property和attribute

    property,attribute都作“属性”解,但是attribute更强调区别于其他事物的特质/特性. 而在JavaScript中,property和attribute更是有明显的区别.众所周知 ...

  5. 理解Objective C 中id

    什么是id,与void *的区别 id在Objective C中是一个类型,一个complier所认可的Objective C类型,跟void *是不一样的,比如一个 id userName, 和vo ...

  6. 浅谈Objective—C中的面向对象特性

    Objective-C世界中的面向对象程序设计 面向对象称程序设计可能是现在最常用的程序设计模式.如何开发实际的程序是存在两个派系的-- 面向对象语言--在过去的几十年中,很多的面向对象语言被发明出来 ...

  7. Objective-C中的@Property详解

    Objective-C中的@Property详解 @Property (属性) class vairs 这个属性有nonatomic, strong, weak, retain, copy等等 我把它 ...

  8. Objective-C中的property

    property可以被声明的位置 property可以在类的interface section和class extension以及protocol中被声明 property的可见性 Objective ...

  9. Objective-C中的@Property具体解释

    Objective-C中的@Property具体解释 @Property (属性) class vairs 这个属性有nonatomic. strong. weak, retain. copy等等 我 ...

随机推荐

  1. LA 4636 (贪心) Cubist Artwok

    题意: 一个由若干小正方体组成的图形,给出它的正视图和侧视图,求满足条件的最少小正方体的个数. 分析: 虽说是一道简单的贪心,可一直没有太好的思路. 又一次可耻地看了别人的题解. http://blo ...

  2. 简单分析什么是SQL注入漏洞

    现在很多人在入侵的过程中基本都是通过SQL注入来完成的,但是有多少人知道为什么会有这样的注入漏洞呢?有的会随口说着对于字符的过滤不严造成的.但是事实是这样吗?我们学这些,不仅要知其然,更要知其所以然! ...

  3. LeetCode Letter Combinations of a Phone Number 电话号码组合

    题意:给一个电话号码,要求返回所有在手机上按键的组合,组合必须由键盘上号码的下方的字母组成. 思路:尼玛,一直RE,题意都不说0和1怎么办.DP解决. class Solution { public: ...

  4. ASIHttpRequest编译不通过

    转:http://blog.sina.com.cn/s/blog_67a5e47201014tof.html Undefined symbols for architecture i386:   &q ...

  5. [Everyday Mathematics]20150114

    设 $a_0$, $d$ 给定, $a_k=a_0+kd$, $k=0,1,\cdots,n$. 试求如下 $n+1$ 阶行列式的值: $$\bex \sev{\ba{ccccc} a_0&a ...

  6. jQuery 遍历 - parent() 方法

    ylbtech-jQuery-sizzle:jQuery 遍历 - parent() 方法  parent() 获得当前匹配元素集合中每个元素的父元素,使用选择器进行筛选是可选的. 1.A,jQuer ...

  7. UI篇--Android中3种方法实现back键动作

    方法一:重写onBackPressed方法 @Override public void onBackPressed() { // do something what you want super.on ...

  8. HTMLayout使用心得

    1.关闭按钮 采用CSS!提供的behavior实现窗口关闭功能,不需要在C++代码中处理关闭事件 div {      behavior: sys-ctl;      -sys-ctl-pos: c ...

  9. UVA 12532-Interval Product(BIT)

    题意: 给n个数字的序列,C v p 把v位上的数字置成p , S l r代表求区间[l,r]各数字相乘得数的符号,对于每个S输出所得符号(’+‘,’-‘,’0‘) 分析: 开两个数组表示区间负数的个 ...

  10. duilib corner属性的贴图技巧——让图片自动贴到控件的的某一边或者一角并自适应控件的大小

    转载请说明原出处,谢谢~~ Duilib给控件贴图功能可以附带多个属性,各个属性的配合可以达到许多效果.以下是duilib支持的所有贴图属性: 贴图描述: Duilib的表现力丰富很大程度上得益于贴图 ...