@property修饰符

转载 2015年11月17日 15:48:57

1.读写性修饰符:readwrite | readonly

readwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法。

readonly:表明这个属性只能读不能写,系统只为我们创建一个getter方法,不会创建setter方法

2.setter相关修饰符:assign | retain | copy

setter相关的修饰符表明setter方法应该如何实现

assign:表示直接赋值,用于基本数据类型(NSInteger和CGFloat)和C数据类型(如int, float, double, char等)另外还有id类型,这个修饰符不会牵涉到内存管理。但是如果是对象类型,使用此修饰符则可能会导致内存泄漏或EXC_BAD_ACCESS错误

retain:针对对象类型进行内存管理。如果对基本数据类型使用,则Xcode会直接报错。当给对象类型使用此修饰符时,setter方法会先将旧的对象属性release掉,再对新的对象进行一次赋值并进行一次retain操作

copy:主要用在NSString类型,表示复制内容。

系统默认属性是assign。retain是指针的复制,copy是内容的复制

3.原子性修饰符:atomic | nonatomic

atomic:表示是线程安全的。

nonatomic:表示是非线程安全的,使用此属性性能会提高一些。

系统默认是atomic

4.getter和setter修饰符

@property(getter = getMethodName, setter = setMethodName) Object *obj;

这两个属性修饰符用于设置自定义生成的getter和setter方法名,使用之后将不再使用系统默认的setter和getter方法名。

在@property修饰符中可以出现多个修饰符,分别用逗号分隔,但是,在上述修饰符中,1,2,3组中的属性分别只能出现一个,只有4中可以同时出现。

Xcode4.2(iOS sdk4.3和以下版本)和以前的版本用retain和assign

Xcode4.3(iOS 5和以上版本)或之后有了ARC用strong和weak

assign:用于非指针变量。用于基础数据类型(如NSInteger, CGFloat)和C数据类型(int, float, double, char等), 另外还有id类型。

          记住:前面不需要加*的就用assign

retain:用于指针变量。一般用于字符串(NSString, NSMutableString), 数组(NSMutableArray, NSArray),字典对象,视图对象(UIView),控制器对象(UIViewController)等

strong类似于retain,weak类似于assign

最简单的记忆:

使用assign:对基础数据类型(如NSInteger, CGFloat)和C数据类型(int, float, double, char等), 另外还有id类型

使用copy:对NSString类型

使用retain:对其它NSObject和其子类

1、在头文件中用@property声明一个属性名,编译器会自动为我们转换成这个属性名的getter方法和setter方法。

2、在实现文件中使用@synthesize propertyName,编译器先会查找这个属性名的setter方法和getter方法有没有被人为实现,如果已经实现,则不再实现,如果没有,则会帮我们生成一个属性名的setter方法和getter方法。

3、当在实现文件中使用了@synthesize propertyName,编译器还会做一件事情,在类成员变量中查找一个名为_propertyName的成员变量,如果没有,再继续查找名为propertyName的成员变量,如果这两个都没有,编译器会自动为我们生成一个私有的名为_propertyName的成员变量。注意,系统自动创建的都是私有的。

4、当在实现文件中这样写@synthesize propertyName = varName;时,setter和getter方法所对应的是一个名为varName的成员变量,修改和读取的是varName成员变量的值。

5、当我们在实现文件中不写@synthesize propertyName时,在Xcode 4.5之前的版本不会帮我们自动实现setter和getter方法,系统当然也不再会为我们生成对应的成员变量。但是在Xcode 4.5之后可以不用写@synthesize了,就跟3、4一样了。

6、当我们既定义了@synthesize,又在实现文件中人为重写setter和getter方法时,那么@synthesize将不再工作,也就不会为我们创建没有定义的_propertyName成员变量了,这时候如果在setter和getter方法中调用_propertyName将会发生编译错误!

Python描述符,属性,方法,修饰符property,staticmethod,classmethod

Python描述符,属性,方法,修饰符property,staticmethod,classmethod 以下内容整理自Python Attributes and Methods、Python描述...

4. @property 后面可以有哪些修饰符

1.读写性修饰符:readwrite | readonly readwrite:表明属性可读可写,系统自动创建属性setter方法和getter方法; readonly:表明属性只能读不能写,系统...
  • hpzBlog
  • hpzBlog
  • 2016年08月24日 10:04
  • 115

黑马程序员---OC基础---封装、继承、多态、@property、id类型、实例变量修饰符

黑马程序员---OC基础---封装、继承、多态、@property、id类型、实例变量修饰符

OC_语法入门_day3_点语法/成员访问修饰符/property/synthesize

H:/Objective-C/OC_day3/00-圆的设计-1-Point2D.h#import // 点 @interface Point2D : NSObject { double ...

OC基础--@property修饰符

1.读写性修饰符:readwrite | readonly readwrite:表明这个属性是可读可写的,系统为我们创建这个属性的setter和getter方法。 readonly:表明这...

ios之property修饰符

property参数知识点1.【掌握】控制set方法的内存管理2.【掌握】控制需不需要生成set方法3.【掌握】多线程管理4.【掌握】控制set方法和get方法的名称1.控制set方法的内存管理 re...

iOS学习(一)@property 修饰符

前言: 近几天看了点面试的题目,感觉自己还是还是太青涩了,不懂的地方还有很多,然后特意去找资料,重新开始对Objective-C学习下。 下面是一些面试题和解答:(大神可以绕道,小菜可以看看) ...

OC基础--@property修饰符

【1】atomic和nonatomic、assign、copy和retain的定义与区别 设置cheng'y

@property的内存管理策略&copy属性修饰符解惑

当我们在做开发时, 一定会用到@property这个修饰符. @property 的本质正如以下这条公式: @property = ivar + getter + setter; “属性” (p...

iOS的property相关修饰符

iOS的property相关修饰符你如果参加过面试,80%的可能性会被问到过,@property的修饰符有哪些,区别又是什么;既然想深入的了解我们就要知道它的来龙去脉,首先,我们的得知道什么是prop...
  • zyx196
  • zyx196
  • 2015年11月18日 23:20
  • 783
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:@property修饰符
举报原因:
原因补充:

(最多只允许输入30个字)