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

转载 2016年06月01日 12:54:52

@property 修饰符

什么情况使用 weak 关键字,相比 assign 有什么不同?

怎么用 copy 关键字?

这个写法会出什么问题: @property (copy) NSMutableArray *array?

如何让自己的类用 copy 修饰符?如何重写带 copy 关键字的 setter?

@property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的

@protocol 和 category 中如何使用 @property

runtime 如何实现 weak 属性



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

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

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

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

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

系统默认属性是assign。retain是指针的复制不重新分配内存空间,copy是内容的复制;

.原子性修饰符: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将会发生编译错误

js对象属性的getter和setter

在看Vue的API时,里面提到修改Model层,会实时更新View视图,底层原理利用的是ES5的getter和setter方法,通过 Object.defineProperty 把属性全部转为 get...
  • wkyseo
  • wkyseo
  • 2017年01月03日 17:02
  • 2664

Python进阶之“属性(property)”详解

来源:http://python.jobbole.com/80955/ Python中有一个被称为属性函数(property)的小概念,它可以做一些有用的事情。在这篇文章中,我们将看到如何能做以下几点...
  • freeking101
  • freeking101
  • 2016年09月12日 10:28
  • 3628

Java的setter方法和getter方法的使用

java有三大特性:封装,继承还有多态。                   而今天,我来讲一下其中最重要的特性之一:封装。           首先,属性可用来描述同一类事物的特征,方法可描述一类事...
  • gdut_2012
  • gdut_2012
  • 2013年12月07日 21:47
  • 7893

你可以看到这个类对属性的存取方法(getter and setter method)使用了标准JavaBean命名约定,同时把类属性(field)的访问级别设成私有的(private)。这是推荐的设计,但并不是必须的。Hibernate也可以直接访问这些field,而使用访问方法(accessor method)的好处是提供了重构时的健壮性(robustness)。为了通过反射机制(Reflection)来实例化\

  • 2010年04月12日 08:40
  • 11.16MB
  • 下载

@property 的本质是什么?ivar、getter、setter 是如何生成并添加到这个类中的

@property 的本质是什么? “属性” (property)作为 Objective-C 的一项特性,主要的作用就在于封装对象中的数据。 Objective-C 对象通常会把其所需要...
  • u011774517
  • u011774517
  • 2017年02月20日 15:08
  • 132

OC - @property与setter,getter方法

先说说setter与getter方法的作用先上一段.m/*================================================= 设计一个K线类, 有三个属性, 最高价格...
  • Gilgamesho
  • Gilgamesho
  • 2016年01月20日 23:46
  • 613

属性访问器(Property Accessor)----Setter/Getter

Setter/Getter:属性/成员变量的封装   本质上是实例方法,但是在类的外部作为属性来访问,它允许创建只读和只写属性。 使用: getter方法:必须有返回类型,且和要访问的私有属...
  • tuhuolong
  • tuhuolong
  • 2011年03月24日 11:06
  • 1451

Objective-C,ios,属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter

属性声明(property declarations), 自定义属性,自动生成 get 和 set 方法,getter 和 setter...
  • wsq724439564
  • wsq724439564
  • 2013年08月14日 19:48
  • 4420

OC 中"烦人"的小特性之getter和setter以及property编译指令

记得以前学C/C++/java时也接触过类似于类的实现问题. 只有在Java的类实现时,有一个不成文的小标准,就是需要为类中的成员变量实现一个getter和setter方法. 当时觉得就是给成员变量...
  • xtianshi00
  • xtianshi00
  • 2015年09月29日 17:34
  • 264

Document Object Model Prototypes, Part 2: Accessor (getter/setter) Support

转自:http://msdn.microsoft.com/en-us/library/ie/dd229916(v=vs.85).aspx As of December 2011, this topi...
  • cizhibr
  • cizhibr
  • 2012年07月17日 23:38
  • 446
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:setter=method @property(getter = getMethodName, setter = setMethodName) Object *obj;
举报原因:
原因补充:

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