@property中有哪些属性关键字?/ @property 后面可以有哪些修饰符?

出题者简介: 孙源(sunnyxx),目前就职于百度

整理者简介:陈奕龙(子循),目前就职于滴滴出行。

转载者:豆电雨(starain)微信:doudianyu

属性可以拥有的特质分为四类:

  1. 原子性--- nonatomic 特质

    在默认情况下,由编译器合成的方法会通过锁定机制确保其原子性(atomicity)。如果属性具备 nonatomic 特质,则不使用同步锁。请注意,尽管没有名为“atomic”的特质(如果某属性不具备 nonatomic 特质,那它就是“原子的” ( atomic) ),但是仍然可以在属性特质中写明这一点,编译器不会报错。若是自己定义存取方法,那么就应该遵从与属性特质相符的原子性。

  2. 读/写权限---readwrite(读写)readonly (只读)
  3. 内存管理语义---assignstrong、 weakunsafe_unretainedcopy
  4. 方法名---getter=<name> 、setter=<name>

    getter=<name>的样式:

          @property (nonatomic, getter=isOn) BOOL on;

    ( `setter=`这种不常用,也不推荐使用。故不在这里给出写法。)

    setter=<name>一般用在特殊的情境下,比如:

在数据反序列化、转模型的过程中,服务器返回的字段如果以 init 开头,所以你需要定义一个 init 开头的属性,但默认生成的 setter 与 getter 方法也会以 init 开头,而编译器会把所有以 init 开头的方法当成初始化方法,而初始化方法只能返回 self 类型,因此编译器会报错。

这时你就可以使用下面的方式来避免编译器报错:

@property(nonatomic, strong, getter=p_initBy, setter=setP_initBy:)NSString *initBy;

另外也可以用关键字进行特殊说明,来避免编译器报错:

@property(nonatomic, readwrite, copy, null_resettable) NSString *initBy;
- (NSString *)initBy __attribute__((objc_method_family(none)));
  1. 不常用的:nonnull,null_resettable,nullable
时间: 2024-08-09 14:41:13

@property中有哪些属性关键字?/ @property 后面可以有哪些修饰符?的相关文章

C#关键字、面向对象特点、访问修饰符、数据类型等

new关键字 一.创建对象 (一)在堆中开辟控件,引用类型在堆中 (二)在开辟的堆控件中,创建对象 (三)调用对象的构造函数 二.隐藏父类的成员 this (一)代表当前类的对象 (二)显示调用自己的构造函数 base (一)显示调用父类的构造函数 (二)调用父类的成员 三.面向对象 (一)封装: 1.减少大量的冗余代码 2.封装将一坨很难理解的功能封装起来,但是对外提供一个访问的使用接口 (二)继承: 特性: 1.单根性:一个子类只能有一个父类 2.传递性:爷爷类,爹类,儿子类 作用: 1.我

@property中的属性关键字整理

原子性 nonatomic/atomic 在默认的情况下,由编译器合成的方法会通过锁定机制确保其原子性(atomicity).如果具备nonatomic特质,则不使用同步锁. 读/写权限  readwrite/readonly 内存管理语义 assign "设置方法" 只会针对"纯量类型"(scalar type, CGFloat或NSInteger等)的简单赋值操作 strong "拥有关系" 为这种属性设置新值时,设置方法先保留新值,并释放旧

2017-9-20C#笔记(类,访问修饰符以及访问性,静态成员和实例成员,字段,Main方法,常量,对象的创建,类的属性)

软件开发的两种主要的方式为面向对象和面向过程,面向过程的焦点主要放在指令的组合和优化上,面向对象的焦点从指令转移到组织程序的数据和功能上. 类 程序的数据和功能被组织为逻辑上相关的数据项和函数的封装集合,称之为类.类作为一个有机的不可分割的整体,对外隐藏具体实现细节,从而实现可重用和易维护等特性,同时还提供了继承功能,支持子类获得父类特征. 类是一个能存储数据并执行代码的数据结构,是逻辑相关的数据和函数的封装,通常代表真实世界中的或概念上的事物. 类包括以下内容: (1) 数据成员:数据成员用来

@property属性关键字

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

readonly,readwrte,@property,nonatomic,assign,retain,copy,strong,weak属性关键字

1.readonly是只读 2.readwrite是读写 [email protected]关键字:设置成员变量的属性(有读/写,赋值assign,retain,copy ,以及对多线程的支持nonatomic). 4.nonatomic非原子性访问,对属性赋值的时候不加锁,多线程并发访问会提高性能.如果不加此属性,则默认是两个访问方法都为原子型事务访问. 5.assign简单赋值,不会引起引用计数的变化.适用于基础类型(NSInteger,CGFloat),C语言里的(int,double,f

属性(@property)

@import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/css/cuteeditor.css); 苹果公司在Object-C 2.0 中引入了属性(property),它组合了新的预编译指令和新的属性访问语法.新的属性功能显著减少了必须编写的冗长代码的数量. 1 .@property关键字 可以使用@property关键字来声明类的属性(property),编译器

Android 属性系统 Property service 设定分析 (转载)

转自:http://blog.csdn.net/andyhuabing/article/details/7381879 Android 属性系统 Property service 设定分析 在Window中有个注册表的东东,可以存储一些类似key:value的 键值对,而在android平台上也有类似的机制叫做属性服务(Property service)进行初始化,设置及修改和查询的功能,adb shell命令使用 setprop 及 getprop 可以看到. 问题: SurfaceFling

Objective-C中的属性(property)

Objective-C中的属性(property) 它组合了新的预编译指令和新的属性访问的语法,新的属性功能显著减少了必须编写的冗长代码的数量. 下面我们来比较下面的代码 //第一种声明方法 -(void)setRainHandling:(float) rainHanding; -(float) rainHandling; -(void)setSnowHandling:(float) snowHandling; -(float) snowHandling; //第二种声明方法 @property

关于@property()的那些属性及ARC简介

@property()常用的属性有:nonatomic,atomic,assign,retain,strong,weak,copy. 其中atomic和nonatomic用来决定编译器生成的getter和setter是否为原子操作. NSObject对象的@property属性时,默认为atomic,提供多线程安全. 在多线程环境下,原子操作是必要的,否则有可能引起错误的结果.加了atomic,setter函数会变成下面这样: NSLock *_lock = [[NSLock alloc]ini