zoukankan      html  css  js  c++  java
  • iOS @property的默认属性

    我是一个比较懒的人,很多情况下@property都不喜欢加属性…所以必须了解默认情况下哪些是已经有的,哪些在需要时是必须要加的。

    原文链接:http://blog.sina.com.cn/s/blog_8c87ba3b0100x39l.html

    readonly

    此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器。或者如果你使用@synthesize关键字,也是有读取器方法被解析。而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误。

    readwrite

    此标记说明属性会被当成读写的,这也是默认属性。设置器和读取器都需要在@implementation中实现。如果使用@synthesize关键字,读取器和设置器都会被解析。

    assign

    此标记说明设置器直接进行赋值,这也是默认值。在使用垃圾收集的应用程序中,如果你要一个属性使用assign,且这个类符合NSCopying协议,你就要明确指出这个标记,而不是简单地使用默认值,否则的话,你将得到一个编译警告。这再次向编译器说明你确实需要赋值,即使它是可拷贝的。

    retain

    指定retain会在赋值时唤醒传入值的retain消息。此属性只能用于Objective-C对象类型,而不能用于Core Foundation对象。(原因很明显,retain会增加对象的引用计数,而基本数据类型或者Core Foundation对象都没有引用计数——译者注)。

    copy

    它指出,在赋值时使用传入值的一份拷贝。拷贝工作由copy方法执行,此属性只对那些实行了NSCopying协议的对象类型有效。更深入的讨论,请参考“复制”部分。

    nonatomic

    指出访问器不是原子操作,而默认地,访问器是原子操作。这也就是说,在多线程环境下,解析的访问器提供一个对属性的安全访问,从获取器得到的返回值或者通过设置器设置的值可以一次完成,即便是别的线程也正在对其进行访问。如果你不指定nonatomic,在自己管理内存的环境中,解析的访问器保留并自动释放返回的值,如果指定了nonatomic,那么访问器只是简单地返回这个值。
     
     
    所以property的属性默认是:readwrite,assign, atomic(没有这个关键字)
  • 相关阅读:
    sqlserver临时表或表变量代替游标
    Server嵌套事务处理的方法
    数据库一对一,一对多,多对多关系
    VS NuGet离线包(缓存包)nupkg安装
    搭建属于自己的NuGet服务器
    SQL Server Management Studio(SSMS)的使用与配置整理
    原来以为京东售后很好,现在才知道 京东售后就是个垃圾!
    [asp.net]C#实现json的序列化和反序列化
    ASP.NET中JSON的序列化和反序列化
    Javascript中判断变量是数组还是对象(array还是object)
  • 原文地址:https://www.cnblogs.com/rayshen/p/4905183.html
Copyright © 2011-2022 走看看