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. bzoj1877: [SDOI2009]晨跑

    挺裸的最小费用最大流... #include<cstdio> #include<queue> #include<cstring> #include<iostr ...

  3. Codeforces Round #272 (Div. 2)

    A. Dreamoon and Stairs 题意:给出n层楼梯,m,一次能够上1层或者2层楼梯,问在所有的上楼需要的步数中是否存在m的倍数 找出范围,即为最大步数为n(一次上一级),最小步数为n/2 ...

  4. sql server压缩数据库和日志文件

    DBCC SHRINKDATABASE 功能:压缩数据库 用法:DBCC SHRINKDATABASE tb_115sou_com 注意:只有产生许多未使用空间的操作(如截断表或删除表操作)后,执行收 ...

  5. Java Web编程的主要组件技术——JSP

    参考书籍:<J2EE开源编程精要15讲> JSP(Java Server Page)页面由HTML代码和嵌入其中的Java代码组成. 简单的JSP页面如: <html> < ...

  6. [经验] - JQuery.Ajax + 跨域 (crossDomain) + POST + JSON + WCF RESTful, 5大陷阱和解决方案

    最近在开发WSS RESTful服务的时候, 碰到了这些个纠结的问题. 在网上查找了半天, 找到n多种解决方案, 但是都是部分的, 要么是没有跨域的情况, 要么是没有post的情况, 要么不是用WCF ...

  7. zoj 3659 Conquer a New Region

    // 给你一颗树 选一个点,从这个点出发到其它所有点的权值和最大// i 到 j的最大权值为 i到j所经历的树边容量的最小值// 第一感觉是树上的dp// 后面发现不可以// 看了题解说是并查集// ...

  8. Android的图片压缩并上传

    Android开发中上传图片很常见,一般为了节省流量会进行压缩的操作,本篇记录一下压缩和上传的方法. 图片压缩的方法 : import java.io.ByteArrayOutputStream; i ...

  9. Android-AnimationDrawable(三)运行的几种方式

    项目开发用到了AnimationDrawable,调用start后没有运行,很纳闷.google搜了下.记录一下. 这个AnimationDrawable.start不能直接写在onClick,onS ...

  10. 【转】堆栈跟踪中收到一个UnhandledExceptionFilter调用时,如何查找问题异常堆栈

    定义没有异常处理程序来处理引发的异常时调用UnhandledExceptionFilter函数.函数通常将异常传递到捕获并处理它所尝试的 Ntdll.dll 文件. 在某些情况下,在其中存在的进程内存 ...