Property属性

  通常,property的声明如下:

  @property(attributes) type name;

  属性可包括readwrite和readonly两种,默认的是readwrite。设置为readonly的property没有set方法。

  为描述setter方法如何工作,属性包括下面的一种:assign、retain、strong、weak和copy

  • assign:简单赋值,不更改引用计数。适用简单数据类型(标量变量),而非指针类型变量
  • retain:与strong相对应,使用了引用计数,retain +1,release -1;当引用计数为0时,dealloc会被调用,内存会被释放
  • copy:创建新值得复制,用于非共享内存时,每个指针都有自己的内存空间,这个属性常用于字符串及其他mutable子类情况下的property。
  • weak:表示弱引用(与assign相似),除了在指向的对象被释放的情况下,property将被设置为nil,只支持ARC方式。
  • strong:说明property是强引用类型,让对象在指针设置时就一直被指向,避免重新分配,特别针对ARC代码。如果没有使用ARC,则与retain属性等同。
  • __unsafe_unretained:在ARC编译环境下,在此环境下,与assign相似。它只是告诉ARC如何正确地调用声明为__unsafe_unretained变量的retain和release。

  在ARC下,才有strong和weak之分;在非ARC下,retain和assign修饰属性。

属性还可以包括非原子性的。假如应用程序是多线程的,那么setter方法为原子操作就很重要。就是说,setter方法在一个线程的执行与同一setter方法在另一线程的执行不会冲突。默认情况下,@synthesize操作将产生这个property的Accessor操作,包括使用锁来确保同一时刻只有一个setter在执行。创建和使用锁会带来一些额外的开销。假如开发者能够确认property的Accessor不需要原子操作,可将属性设置为非原子性来减少开销。

时间: 2024-12-07 16:50:55

Property属性的相关文章

ios的@property属性和@synthesize属性(转)

当你定义了一系列的变量时,需要写很多的getter和setter方法,而且它们的形式都是差不多的,,所以Xcode提供了@property 和@synthesize属性,@property用在 .h 头文件中用作声明,@synthesize用在.m 文件中用于实现. 如下,新建一个基于"Command Line Tool"的项目,名为"property",再新建一个Student类, 传统的写法是: Student.h [cpp] view plaincopy //

[iOS基础控件 - 6.12.3] @property属性 strong weak copy

A.概念 @property 的修饰词 strong: 强指针/强引用(iOS6及之前是retain) weak: 弱智真/弱引用(iOS6及之前是assign) 默认情况所有指针都是强指针 使用 "__weak" 修饰的指针是弱指针 ARC准则:只要没有强指针指向,对象就会被销毁 @property属性的用法 * weak(assign) :  代理\UI控件* strong(retain) : 其他对象(除代理\UI控件\字符串以外的对象)* copy : 字符串 * assign

property属性[Python]

一.property解释 根据文档资料解释: property([fget[, fset[, fdel[, doc]]]]) Return a property attribute for new-style classes (classes that derive from object) 使用这个内建函数时,类必须继承object,才有效. property有可选参数fget, fset, fdel, doc.fget是获取值函数,fset是设置函数值,fdel是删除函数,doc文档说明.

盘点iOS开发中property属性常用关键字

一.关键字说明 1.@synthesize:自动生成成员变量相应的存取方法,可以使用点语法操作该变量的存取. 2.@implementation:  表明类的实现  ,以@end 结束. 3.self  :类似java语言当中的this ,是隐藏指针  指向接受消息的对象的指针 .消息所调用的方法使用该指针参数查找它要使用的实例. 4.super : 调用父类的方法 .    self = [ super init];  判断是否可以成功初始化 如果父类成功初始化 那么将会赋值给 self  ,

OC基础之-Property(属性)和点语法

学习属性之前回忆一下之前学到的setter方法和getter方法: (1)setter方法的作用:用来为单一的实例变量赋值(只能是一个实例变量,多了的叫做get方法) (2)setter方法的写法标准: - 号方法,  无返回值,   名字以set开头+要设置的变量的实例变量名(首字母需大写):(setter方法有且只有一个参数)+参数的类型(和实例变量的类型相同)+参数名(和实例变量名相同) (3)getter方法的作用:用来获取单一实例变量的值. (4)getter方法的写法标准: - 号方

@property属性关键字

关于@property属性关键字使用注意:* weak(assign) :  代理\UI控件* strong(retain) : 其他对象(除代理\UI控件\字符串以外的对象)* copy : 字符串* assign : 非对象类型(基本数据类型int\float\BOOL\枚举\结构体)

IOS变量的property属性设置和意义总结

最近有机会对IOS的property属性进行了一个全面的了解和总结: IOS 的@property和@synthesize帮我们轻易的生成对象的getter和setter方法来完成对对象的赋值和访问.但是如果我们如果要动态设置对象的getter和setter方法可以使用@property和@dynamic组合.对象访问方法property的属性设置非常多,诸如:atomic和nonatomic,readwrite和readonly,retain,assign和copy,strong和weak.

科学计算三维可视化---Traits(Property属性)

Property属性 使用Property函数为类创建Property属性,Property属性用法和一般属性相同,但是他在获取值和赋值时会调用相应的方法 traits库也提供了Property属性 from traits.api import Property from traits.api import Property,HasTraits,Float,cached_property class rectangle(HasTraits): w = Float(1.0) h = Float(2

python中的property属性

目录 1. 什么是property属性 2. 简单的实例 3. property属性的有两种方式 3.1 装饰器方式 3.2 类属性方式,创建值为property对象的类属性 4. property属性-应用 4.1. 私有属性添加getter和setter方法 4.2. 使用property升级getter和setter方法 4.3. 使用property取代getter和setter方法 1. 什么是property属性 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法 # #

Python中property属性详解

1. 什么是property属性 一种用起来像是使用的实例属性一样的特殊属性,可以对应于某个方法 # ############### 定义 ############### class Foo: def func(self): pass # 定义property属性 @property def prop(self): pass # ############### 调用 ############### foo_obj = Foo() foo_obj.func() # 调用实例方法 foo_obj.p