美文网首页
《精通Objective-C》阅读笔记(1)

《精通Objective-C》阅读笔记(1)

作者: 41c48b8df394 | 来源:发表于2018-11-10 21:38 被阅读7次

    属性

    属性与实例变量的区别:属性无法直接访问对象的内部状态,但提供了访问这类数据的方便机制(即读取和设置方法),因而可以含有其他逻辑

    属性的特性
    使用属性的声明特性可以设置属性的存储语义和其他行为

    nonatomic

    原子性,使用该特性可以在多线程并发的情况中,将访问器设置为非原子性的,因而能够提供不同的结过。如果不设置该特性,访问器就会拥有原子性,换言之,赋值和返回结过永远都会完全同步。

    assign

    通过该特性可以在不使用copy和retainy特性的情况下,使属性的设置方法执行简单的赋值操作,这个特性是默认设置的。

    retain

    在赋值时,输入值会被发送一条保留消息,而上一个值会被发送一条释放消息

    copy

    在赋值时,输入值会被发送一条新消息的副本,而上一个值会被发送一条释放消息

    strong

    当属性使用ARC内存管理功能时,该特性等同于retain特性

    weak

    当属性使用ARC内存管理功能时,该特性的作用与assign特性类似,但如果引用对象被释放了,属性的值会被设置为nil

    readwrite

    使用该特性时,属性可以被读取也可以被写入,而且必须实现getter和setter方法,这个特性时默认设置。

    read-only

    使用该特性时,会将属性设置为只读,必须设置getter方法

    协议

    使用协议声明的方法和属性可以由任何类实现,类接口直接与特定的类关联,因此也会直接与类的层次结构关联。相对而言,协议不与特定的类关联,因此使用它可以捕捉无继承关系类之间的相似之处,协议使Objective-C支持多重继承规范的概念(方法声明)。协议还可以同于定义对象能够发送哪些消息(通过设置遵守协议的属性)。

    语法

    @protocol exampleDelegate<NSObject>
    //必须实现的
    @required
    
    //可选的
    @optional
    
    @end
    

    分类

    使用分类可以在不进行子类化的情况下,为已经存在的类增加功能。分类中的方法会成为类的组成部分,而且会被其子类继承,这意味着可以向这个类发送消息,调用在分类中定义的方法
    可用于:

    1.扩展其他人定义的类
    2.提到子类
    3.将新类的实现代码分发给多个源文件
    4.给类添加属性(通过runtime关联上)

    扩展

    可以将扩展视为匿名分类,在扩展中声明的方法必须在相应类.m中实现

    扩展与分类的区别

    扩展能够声明实例变量和属性,编译器会检查在扩展中声明的方法是否被实现,类扩展通常应存储在类实现文件中,并用于组织和声明在勒种独立使用的其他私有方法

    相关文章

      网友评论

          本文标题:《精通Objective-C》阅读笔记(1)

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