美文网首页程序员
采用现代Objective-C (2)

采用现代Objective-C (2)

作者: Runxing | 来源:发表于2014-05-17 15:24 被阅读88次

Properties

一个public或private的Objective-C属性使用@property语法声明的。

    @property (readonly, getter=isBlue) BOOL blue;

属性持有着一个对象的状态。他们反映对象的本质属性和其他对象的关系。Properties提供一个安全、方便的方式来定义这些属性,而无需编写一组自定义访问器方法(虽然属性允许定制的getter和setter,如果需要的话)。


使用属性而不是实例变量在尽可能多的地方提供了许多好处:

  • 自动合成getters和setters。当你声明一个属性,默认情况下为你创建getter和setter方法。
  • 更好的意图声明一组方法。因为访问器方法的命名约定方便,很明显getter和setter方法是做什么的。
  • property关键字表示关于行为的额外信息。属性提供潜在的声明的属性像assign(vs copu),weak,atomic(vs nonatomic),等等。

属性方法遵循一个简单的命名约定。getter属性的名称(例如,date),setter属性在名称前加前缀,按驼峰式命名书写(例如,setDate)。Boolean属性的命名约定是声明他们的getter方法以'is'开头。

    @property (readonly, getter=isBlue) BOOL blue;

因此,以下所有调用方式都可以正常工作:

    if(color.blue){}
    if(color.isBlue){}
    if([color isBlue]){}

在决定什么可能是一个属性时,记住,如下不是属性:

  • init方法
  • copy方法,mutableCopy方法
  • 一个类的工厂方法
  • 一个初始化一个动作并返回BOOL值的方法
  • 一个明确改变内部状态对getter有副作用的方法

此外,考虑以下的规则集当在你的代码中定义属性时:

  • 一个读/写属性有两个访问器方法。setter接受一个参数什么也不返回,getter不接受参数并返回一个值。可以用readwrite关键字设置这个属性。
  • 一个只读属性有一个访问器方法,getter不接受参数并返回一个值。可以使用readonly关键字设置。
  • getter应该幂等的(如果一个getter方法调用了两次,那么第二次结果应该和第一次是相同的)。
    但是,每次geeter被调用返回结果是可接受的。

怎样适配

定义一组方法,有资格被转换成属性,诸如此类的:

    - (NSColor *)backgroundColor;
    - (void)setBackgroundColor:(NSColor *)color;

用@property语法和其他合适的关键字定义他们:

    @property (copy) NSColor *backgroundColor;

更多关于property关键字和其他的信息,请看“Encapsulating Data”

或者,您可以在Xcode使用现代objective-c变换器自动进行转换您的代码。更多信息请看使用Xcode重构你的代码

相关文章

  • 采用现代Objective-C (2)

    Properties 一个public或private的Objective-C属性使用@property语法声明的...

  • 采用现代Objective-C (1)

    多年来,Objective-C语言已经有了革命性的发展。虽然核心理念和实践保持不变,但语言中的部分内容经历了重大的...

  • 采用现代Objective-C (3)

    Enumeration Macros NS_ENUM和NS_OPTIONS宏提供一个简洁、简单的定义枚举的方法和基...

  • iOS - 采用现代化的Objective-C

    说明:本篇文章是作者(Mitchell)参考苹果的 Adopting Modern Objective-C 这篇文...

  • iOS求职之OC面试题

    1、Objective-C的类可以多重继承么?可以采用多个协议么? 答:不可以多重继承,可以采用多个协议。 2、#...

  • iOS求职之OC面试题

    1、Objective-C的类可以多重继承么?可以采用多个协议么? 答:不可以多重继承,可以采用多个协议。 2、#...

  • 熟悉Objective-C

    一、了解Objective-C语言的起源 Objective-C采用消息结构(messaging structur...

  • iOS-OC面试题

    1、Objective-C的类可以多重继承么?可以采用多个协议么?答:不可以多重继承,可以采用多个协议。2、#im...

  • iOS-面试题3

    1、Objective-C的类可以多重继承么?可以采用多个协议么?答:不可以多重继承,可以采用多个协议。2、#im...

  • View Controller 容器 - 言无不尽 ( 中文翻新

    原 Demo 代码为 Objective-C , 我采用了 Swift

网友评论

    本文标题:采用现代Objective-C (2)

    本文链接:https://www.haomeiwen.com/subject/enxdtttx.html