Object-c @property的用法

property是一种代码生成机制,可以生成不同类型的getter/setter函数,特别是假设你想要用点(.)操作符号来存取变量的话,你就能必须使用property。

怎样使用?

使用方法如:@property (attribute1,attribute2) float value;

这些attribute包含:

readonly-仅仅读,仅仅能读取而不能设定值(不能用setXXXX的函式)。

readwrite-可读可写(默认)。

assign-在设值时替换新旧变量(默认)。

retain-在设值时retain新的变量,release旧变量。

copy-在设值时copy一份新变量,release旧变量。

nonatomic-默认為atomic。

strong - 在引用计数环境下,默觉得strong,与retain作用同样;

从5.0系统后引入了weak,作用与assign相似,只是当所指向对象引用为0时,自己主动置为nil。

前两个仅仅是简单的设定变量的可读写性。

assign仅仅是简单的替换变量,通常运用在标量类型上,比如:NSInterger和CGRect,

或者(在引用计数环境)为那些你不拥有的对象,比如:delegates。

在垃圾收集环境下retain 和 assign实际上是同样的。

它的产生的setter代码內容类似:

- (void)setValue:(float)newValue {

value = newValue;

}

另一点很要注意的就是,在使用property时一定要在前面带上self(如:self.xxx),假设你不这样做,easy造成内存泄漏。

时间: 2024-11-07 21:14:25

Object-c @property的用法的相关文章

[Angular 2] Using a Reducer to Change an Object's Property Inside an Array

Reducers are also often used for changing a single property inside of other reducers. This lesson shows how a type can enter the people reducer, but then the people reducer can use a different type to call the clock reducer and get a value back. So t

使用 prop() 取得 Object 的 Property

2019-09-14 map() 的 Callback 常需要常需要從 Object 取得 Property,可使用 Ramda 的 prop() 使 Callback 能 Point-free. Version macOS Mojave 10.14.6VS Code 1.38.1Quokka 1.0.244Ramda 0.26.1 Imperative let data = [1, 2, 3]; let lut = { 1: 'FP in JavaScript', 2: 'RxJS in Ac

@property的用法

实例的属性有些是需要进行约束的,比如分数.年龄都需要是整形,而不能是浮点数类型,因此为了约束这些属性的取值,可以在类的定义中定义赋值和取值函数,在赋值函数中对变量的取值进行约束,如下所示 class Student(object): def get_score(self): return self._score def set_score(self, value): if not isinstance(value, int): raise ValueError('score must be an

关于jquery的$each((Object, function(p1, p2)用法

通过它,你可以遍历对象.数组的属性值并进行处理. 使用说明 each函数根据参数的类型实现的效果不完全一致: 1.遍历对象(有附加参数) $.each(Object, function(p1, p2) { this;       //这里的this指向每次遍历中Object的当前属性值 p1; p2;     //访问附加参数 }, ['参数1', '参数2']); 2.遍历数组(有附件参数) $.each(Array, function(p1, p2){ this;       //这里的th

【Python】@property的用法

设想我们要给一个student()类的一个实例s,添加一个score的属性,比如: s.score=999999 这个值明显是不合理的,但是它却是可行的,怎么能改变这种情况?我们能想到的就是用类方法 class student: def setsore: #code def getsocre: #code 这样是可行的,但是没有使用属性直接设置方便,这时候就可以用到@property装饰器了. 当使用@property装饰器对getattr方法进行装饰的时候,会自动产生一个对setattr方法

<s:property>的用法

1,访问Action值栈中的普通属性: <s:property value="attrName"/> 2,访问Action值栈中的对象属性(要有get set方法): <s:property value="obj.attrName"/> <s:property value="obj1.obj2.attrName"/> 3,访问值栈中对象属性的方法 <s:property value="obj.m

struts2中&lt;s:property&gt;的用法

1,访问Action值栈中的普通属性: <s:property value="attrName"/> 2,访问Action值栈中的对象属性(要有get set方法): <s:property value="obj.attrName"/> <s:property value="obj1.obj2.attrName"/> 3,访问值栈中对象属性的方法 <s:property value="obj.m

applicationContext.xml文件中&lt;bean&gt;标签中property属性用法说明

<bean name="useraaa" class="com.maple.bean.User"> <property name="name"> <value>小强</value> </property> <property name="age"> <value>26</value> </property> <pr

JS-Object and Property的删除用法

在JS中,Object和Property的删除用法: 1 var myObject = {name:'jimmy', age:12, height:123} 2 delete myObject["jimmy"]; 3 delete myObject.age; 4 with (myObject) { 5 delete height; 6 } 7 8 // and an object 9 var myObject = new Object(); 10 delete myObject; 11