美文网首页
《精通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