如何在@property属性中给属性附初始值

Objective-C中@property的所有属性详解_Linux编程_Linux公社-Linux系统门户网站
你好,游客
Objective-C中@property的所有属性详解
来源:Linux社区&
作者:Linux
1,assign :
简单赋值,不更改索引计数
假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a 和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉&
应用场合:
对基础数据类型 (例如NSInteger,CGFloat)和C数据类型(int, float, double, char, 等)& & &
适用简单数据类型
2,retain:
与strong相对应,使用了引用计数,retain+1,release -1;当引用 计数为0时,dealloc会被调用,内存被释放&
用于非共享内存时,每个指针有自己的内存空间&
4,atomic//默认属性
A,当一个变量声明为atomic时,意味着在多线程中只能有一个线程能对它进行访问
B,当一个变量声明为atomic时,该变量为线程安全型,但是会影响访问速度,
C,当一个变量声明为atomic时,在非ARC编译环境下,需要设置访问锁来保证对该变量进行正确的get/set&
&5,nonatomic
当一个变量声明为nonatomic时,意味着多个线程可以同时对其进行访问
当一个变量声明为nonatomic时,它是非线程安全型,访问速度快;
当一个变量声明为nonatomic时,当两个不同的线程对其访问时,容易失控。&
总结:atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作。在多线程环境下,原子操作是必要的,否则有可能引起错误的结果。加了atomic,setter函数会变成下面这样:?
if (property != newValue) {&
& & [property release];&
& & property = [newValue retain];&
6.strong://ARC中默认属性,等于非ARC中的retain
与retain相对应,
应用场景:
strong属性用于ARC中
@property (strong,nonatomic) ViewController *viewC&
与assign 相对应,
应用场景:
用于IBOutlets,如,UIViewController的子类,即一般的控件。
@property (weak, nonatomic) IBOutlet UIButton *myB
strong与weak的区别举例:
我们把要用strong或者weak的对象比作一只风筝,风筝想挣脱线的束缚,自由飞翔去,如果此时有一根线,那么这只风筝就挣脱不了
strong属性的变量:
当我们把指向一只风筝的变量声明为strong时,此时,你就拥有控制这只风筝的线,假如此时有五个人同时控制这只风筝(即这只风筝对象有三个strong类型的变量指向它),那么只有一种情况,这只风筝才会挣脱掉线的束缚:这三个人都放掉手中的线,(release掉)
weak属性的变量:
当我们把指向一只风筝的变量声明为weak时,此时,就像站在旁边看风筝的观众们一样,当上面的三个人还握着手中的线时,他们只能看到风筝,并不能控制它,他们能做的只能是用手指指向风筝,并大喊,&看,那只风筝飞得真高!&,然而,当上面的三个人把手中的线都放掉时,此时,风筝飞走了,看不见了,不管有再多的观众,他们再也看不到风筝了,这个故事告诉我们一个道理:当strong类型的指针被释放掉之后,所有的指向同一个对象的weak指针都会被清零。
8,readonly
只有get方法,没有set方法
9,readwrite//默认属性
有get/set方法
10,unsafe_unretauined
用在ARC编译环境下,在此环境下,与assign相似。它只是告诉ARC如何正确地调用声明为unsafe_unretauined变量的retain和release
相关资讯 & & &
& (01/13/:24)
& (12/13/:53)
& (09/25/:53)
& (12/13/:07)
& (12/13/:25)
   同意评论声明
   发表
尊重网上道德,遵守中华人民共和国的各项有关法律法规
承担一切因您的行为而直接或间接导致的民事或刑事法律责任
本站管理人员有权保留或删除其管辖留言中的任意内容
本站有权在网站内转载或引用您的评论
参与本评论即表明您已经阅读并接受上述条款HTML中property与attribute是极易混淆的两个概念。大多数时候这两个单词都翻译为“属性”,为了区分二者,一般将property翻译为”属性”,attribute翻译为”特性”。
Struts2的s:property标签有escape这样一个属性,当把它设成false时,s:property的value就会被显示出来,达到和innerHTML一样的效果 ...
不能用 id,struts标签要用styleId不然会报错
然后js里面
var content=document.getElementById("title").,就可以取到值了...
用js给input赋值的一般采用以下两种方式:
一、i.value=200;
二、i.setAttribute('value',300);
已上两种看似都是给value赋值,但是结果去不同。
offsetHeight不包含滚动条 scrollHeight包含滚动条
通过name操作
function getName()
var count=d...
第一:attr(name);
此方法获取jquery对象中第一个元素的对应属性名的属性值。
jQuery基础(样式篇,DOM对象,选择器,属性样式)$(document).ready 的作用是等页面的文档(document)中的节点都加载完毕后,再执行后续的代码,因为我们在执行代码的时候,可...
他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)【】写的控件 如何设置属性默认值_百度知道
【】写的控件 如何设置属性默认值
当color属性设定成clBtnface的时候property Address :string read FsAddress write setAddress,Color的属性是存储到dfm文件中的,如果color的属性设置成clWhite,则保存文件后:Integer read FiSize write SetSize default 56;
property TimeOut ,却发现实际构造出来的Color属性的值仍然是clDefault,所以当Color属性的默认值设定clBtnface:Integer read FiTimeOut write SetTimeOut default 4000;
property TTL :Integer read FiTTL write SetTTL default 64;
property Times ,以节省存储控件:Integer read FiTimes write SetTimes default 10;
------解决方案--------------------------------------------------------
Delphi控件指定属性的时候可以加上Default关键字,例如property Color default clB
property Size ,觉得疑惑不解,后来才得知,这个default跟构造的默认值无关。一直以为这个是构造类的时候的默认值,dfm文件就不存储这个属性的值,而是跟dfm文件的存储有关
采纳率:96%
为您推荐:
其他类似问题
默认值的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。业务页面开发时,经常有会有默认值的设置需求,由于dorado统一的采用数据模型管理机制,默认值的设置与传统不基于数据模型的网页开发技术有所差别,如下的是基于传统网页技术设置默认值的方式:
而在dorado中如果你直接设置一个绑带了DataSet或Entity的TextEdtior控件对象的text值是没有意义的,因为数据绑带的关系它会忽略自身的text属性。下面我们看看基于数据绑带机制下的默认值实现办法。(一)defaultValue属性1.原理说明TextEditor类型的文本编辑器的数据模型都是通过DataType的PropertyDef描述的,PropertyDef提供了一个defaultValue属性,用于定义默认值:但是这是基于数据模型的设置方式,只有当你创建一个新的Entity对象的时候这个默认值才起作用,这样说你可能有点难以理解,但是我用Java类的定义来描述,你可能就容易理解了,如下的Java类的定义:
其中的sex属性的设置,只有你new Employee()的时候才会起作用。PropertyDef的defaultValue的运行机制和这个一样。2.补充知识:理解当前记录由于数据绑带机制,如果当前绑带的DataSet中没有数据,则编辑框会展现灰化禁用标示:如果这个时候想要使当前编辑框可编辑,就需要创建一个新的Entity对象,假设当前AutoForm绑定的DataSet为dataetEmployee,则可以通过如下的代码添加一个新的Entity对象:
insert方法执行后,编辑框就变成可执行状态,并且PropertyDef的defaultValue也发挥作用了,如下的sex字段:更多当前记录的概念请参考:(二)insert({})方法上述范例中我们其实也可以通过如下的代码实现默认值的处理:
如果有多个属性要设置默认值,可以利用set方法对多个属性一次性的赋值:
但有时候也可以通过insert方法实现更简洁的写法:
下面是多个属性的赋值:
当你有多个属性需要设置默认值的时候,不推荐使用下面的赋值方式:
(三)onInsert事件除了上面介绍的几种设置默认值的方法,还有一种方法是利用数据模型的事件触发机制,当我们新增一个Entity对象的时候,该Entity对象所属的DataType对象就会触发onInsert事件:并且该事件的arg中有一个entity参数被传入,该参数表示是当前新增后的Entity对象,因此默认值的处理,我们也可以通过该事件实现:
(四)defaultValue属性,insert()方法还是onInsert事件?上面介绍了三种不同的默认值的实现方式,下面再讲讲如何正确的选择默认值的实现方式。首先如果都是静态值,那么三种实现方式是没有明显区别的。静态值不仅指固定值,如固定字符串,固定的逻辑类型值或固定数字类型的数据,也可以是在页面不刷新情况下固定不变的值,例如:session或请求当前页面时request中的某一个值。这种值在当前页面不刷新情况下,可以认为都是静态的值。这种值的获取方法说明:defaultValue中获取Request中getParameter的值:JS代码中获取Request中getParameter的值:
这是一种EL表达式的写法,Dorado中默认提供了一些EL表达式,便于获取如request,session中的信息,架构设计师也可以根据项目自身的特点实现自定义的EL表达式,丰富开发模式和简化代码编写,EL表达式的详细说明参考:对于上面列举的静态数据,开发人员可以选用上面的任意一种默认值的实现方法。但是对于如下的这种默认值是不适合通过PropertyDef的defaultValue来定义的:默认值需要根据当前业务表中的数据或关联业务表中的数据作运算和比较才能确定的值。对于这种默认值应该要选用insert()方法或onInsert事件实现,这样便于通过JS代码完成较复杂的逻辑运算,并将运算结果赋值给新增的Entity对象。至于insert()方法和onInsert事件的差别在于:当这个页面中有多处调用insert()方法添加相同DataType的数据实体的时候,默认值用onInsert事件实现更为合适。因为这样只要开发人员在onInsert事件中完成相关属性的初始化工作之后,其它任何需要调用insert()方法的时候,就无需操心默认值的处理了。@property 属性 - 简书
@property 属性
此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器。或者如果你使用@synthesize关键字,也是有读取器方法被解析。而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误。
此标记说明属性会被当成读写的,这也是默认属性。设置器和读取器都需要在@implementation中实现。如果使用@synthesize关键字,读取器和设置器都会被解析。
**assign **
简单赋值,不更改索引计数
假设你用malloc分配了一块内存,并且把它的地址赋值给了指针a,后来你希望指针b也共享这块内存,于是你又把a赋值给(assign)了b。此时a 和b指向同一块内存,请问当a不再需要这块内存,能否直接释放它?答案是否定的,因为a并不知道b是否还在使用这块内存,如果a释放了,那么b在使用这块内存的时候会引起程序crash掉
指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数——译者注)。
与strong相对应,使用了引用计数,retain+1,release -1;当引用 计数为0时,dealloc会被调用,内存被释放
用于非共享内存时,每个指针有自己的内存空间
atomic//默认属性
当一个变量声明为atomic时,意味着在多线程中只能有一个线程能对它进行访问
当一个变量声明为atomic时,该变量为线程安全型,但是会影响访问速度,
当一个变量声明为atomic时,在非ARC编译环境下,需要设置访问锁来保证对该变量进行正确的get/set
当一个变量声明为nonatomic时,意味着多个线程可以同时对其进行访问
当一个变量声明为nonatomic时,它是非线程安全型,访问速度快;
当一个变量声明为nonatomic时,当两个不同的线程对其访问时,容易失控。
strong://ARC中默认属性,等于非ARC中的retain
与retain相对应,
应用场景:
strong属性用于ARC中
@property (strong,nonatomic) ViewController *viewC
与assign 相对应,
应用场景:
用于IBOutlets,如,UIViewController的子类,即一般的控件。
@property (weak, nonatomic) IBOutlet UIButton *myB
strong与weak的区别举例:
我们把要用strong或者weak的对象比作一只风筝,风筝想挣脱线的束缚,自由飞翔去,如果此时有一根线,那么这只风筝就挣脱不了
strong属性的变量:
当我们把指向一只风筝的变量声明为strong时,此时,你就拥有控制这只风筝的线,假如此时有五个人同时控制这只风筝(即这只风筝对象有三个strong类型的变量指向它),那么只有一种情况,这只风筝才会挣脱掉线的束缚:这三个人都放掉手中的线,(release掉)
weak属性的变量:
当我们把指向一只风筝的变量声明为weak时,此时,就像站在旁边看风筝的观众们一样,当上面的三个人还握着手中的线时,他们只能看到风筝,并不能控制它,他们能做的只能是用手指指向风筝,并大喊,“看,那只风筝飞得真高!”,然而,当上面的三个人把手中的线都放掉时,此时,风筝飞走了,看不见了,不管有再多的观众,他们再也看不到风筝了,这个故事告诉我们一个道理:当strong类型的指针被释放掉之后,所有的指向同一个对象的weak指针都会被清零。
iOS程序员。
其实我想当个摄影师。
个人域名:www.sbookreview.com
@property是OC中用到的,最重要的key words。我们经常看到assign,retain,copy和strong,weak nonatomic等关键字出现在它之后。这个背后必然有各种阴谋,必须弄清,不然又是个坑的节奏。 非ARC环境 现在基本都用ARC了,不过一...
在开发中,我们iOS在定义属性的时候,需要在括号property()内说明该属性的特性,因为属性的特性决定了属性在原子性、存取方法、内存管理三个方面的特性。首先属性property有两大概念:ivar(实例变量)、存取方法(access method=getter),即@p...
修饰词:assign、weak、strong、retain、copy、nonatomic、atomic、readonly、readwrite assign(ARC、MRC) 1、修饰整型等基本数据类型,直接赋值的意思。 2、如果没有weak、strong、retain、co...
最近有机会对IOS的property属性进行了一个全面的了解和总结: IOS 的@property和@synthesize帮我们轻易的生成对象的getter和setter方法来完成对对象的赋值和访问。但是如果我们如果要动态设置对象的getter和setter方法可以使用@p...
1、assign :简单赋值,不更改索引计数 2、retain:与strong相对应,使用了引用计数+1 3、copy:用于非共享内存时,每个指针有自己的内存空间 4、atomic://默认属性 A,当一个变量声明为atomic时,意味着在多线程中只能有一个线程能对它进行访...
你的悲伤就是我的悲伤,你的欢乐就是我的欢乐,爱人,我该如何去爱你,如何让你知道,你是我今生唯一的疼痛。爱人,在过往每个不眠的夜里,我真的―好想―梦见你。 柳拾意《邂逅》
今天有句话,我很喜欢:我们所追求的永恒和美好,正是你所经历的每一个当下。 一,珍惜当下 小时候,幸福是爸爸带回来的小布偶玩具,是揣在兜里舍不得花的几元零花钱,是老师对你的表扬和鼓励。 长大了,幸福是一家人的齐乐融融,是忙了一天回家躺着就能睡着,是朋友送来亲手做的甜品,是店里...
史铁生(),生在北京,祖籍河北涿县人。代表作有《我与地坛》,《想念地坛》,小说《我的遥远的清平湾》,《奶奶的星星》,《命若琴弦》,《务虚笔记》等。 原文:史铁生《想念地坛》 (我还没有到过地坛,他说想念的时候,我就已经开始羡慕了。) 札记:十一画 标记: ...
蒙台梭利是意大利第一位医学女博士,继福禄贝尔后又一位杰出的幼儿教育家。蒙台梭利最初研究智力缺陷儿童的心理和教育问题,后来致力于正常儿童的教育实验,创办了举世闻名的“儿童之家”。她撰写的幼儿教育理论著作已经被翻译成为37国文字,对现代儿童教育的改革和发展产生深刻的影响。 (一...}

我要回帖

更多关于 property ref属性 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信