Objective-C 动态特性

本文转载自:https://onevcat.com/2012/04/objective-c-runtime/

动态特性

Objective-C 具有相当多的动态特性,基本的,有:

动态类型(Dynamic typing)
动态绑定(Dynamic binding)
动态加载(Dynamic loading)

这些动态特性都是在 Cocoa 程序开发时非常常用到的语言特性,而在这之后,OC 在底层也提供了相当丰富的运行时的特性,比如枚举类属性方法、获取方法实现等等。虽然在平常的 Cocoa 开发中这些较底层的运行特性基本用不着,但是在某些情况下如果你知道这些特性并合理加以运用的话,往往能事半功倍。

Objective-C ARC自动引用计数

本文转载自:http://www.onevcat.com/2012/06/arc-hand-by-hand/

ARC 自动引用计数

1.什么是 ARC

Automatic Reference Counting,自动引用计数,即ARC。ARC 是 iOS5 所引入的最大变革,用于代替传统的 MRC(手动引用计数)进行内存管理。

当 ARC 开启时,编译器将自动在代码合适的地方插入 retain,release 和 autorelease,而作为开发者,完全不需要担心编译器会做错,在工程中使用ARC非常简单:只需要像往常那样编写代码,只不过永远不写retain,release 和 autorelease 三个关键字,这是ARC的基本原则。

Objective-C @property属性

@property

@property 是声明属性的语法,它可以快速方便的为实例变量创建存取器,并允许我们通过点语法使用存取器。

存取器(accessor):指用于获取和设置实例变量的方法。用于获取实例变量值的存取器是 getter,用于设置实例变量值的存取器是 setter。

Objective-C 字典

字典(NSDictionary)

字典是由 键——值 对应组成的数据集合,通过键(key)查找对应的值(value),key 通常是字符串对象,也可以是其他任意类型对象。字典也分别有不可变(NSDictionary)和可变(NSMutableDcitionary)

在一个字典对象中,key 的值必须是唯一的,字典对象的 key 和 value 都不可以为空(nil),如果需要在一个字典对象中表示一个空值。可以使用 NSNull 对象。

Objective-C 集合

集合(NSSet)

NSSet 类是一组单值对象的集合,而且 NSSet 对象中元素是无序的,同一个对象只能保存一个,并且,他也分为可变 (NSSet) 和不可变 (NSMutableSet) 两种。

不可变集合(NSSet)

Objective-C 数组

数组(NSArray)

Foundation中的数组是一组有序的对象集合,通过索引下标获取到数组中的元素。数组中不可以存放基本数据类型,只能存放实例(对象)。同样,数组也分为可变 (NSArray) 和不可变 (NSMutbleArray) 两种。

不可变数组(NSArray)

1.初始化

//创建一个空数组。
NSArray *array = [NSArray array];

//创建一个只有一个元素的数组。
NSArray *array1 = [NSArray arrayWithObject:@"one"];

//多个元素数组初始化时,以 nil 作为数组结束。
NSArray *array2 = [NSArray arrayWithObjects:@"one",@"two",nil];

Objective-C 字符串

字符串(NSString)

Objective-C 中处理字符串的的类主要是 NSString 和 NSMutableString 两个类,NSString 类一旦创建,就不可以再修改,若需要一个可修改的字符串对象,需创建 NSMutableString 实例。

不可变字符串(NSString)

1.创建字符串常量

NSString *string = @"字符串常量";

Objective-C 代码块

版权说明:本文为原创文章,未经允许,不得转载。

代码块(Block)

1.代码块是对C语言中函数的扩展,除了函数中的代码,代码块还包含变量绑定。代码块有时候也被称之为闭包。

由于函数调用是异步执行的,如果想让一个操作执行完之后,执行另一个函数,则无法按照正常代码书写顺序进行编程,这时就需要代码块。

代码块是一个函数体(匿名函数),它是 Objective-C 对于闭包的实现,在代码块中,可以持有或引用局部变量,同时利用 Block 可以将一个操作作为一个参数进行传递。

代码块本质上和其他变量类似,不同的是,代码块存储的数据是一个函数体,可以像调用其他标准函数一样,传入参数值,并得到返回值。

Objective-C 协议和委托

版权说明:本文为原创文章,未经允许,不得转载。

协议 (protocol)

1.协议的基本概念

协议是一种特殊的程序设计结构,用于声明专门被其他类实现的方法,协议在以下场合非常有用:

· 需要由其他类实现的方法。
· 声明未知类的接口。
· 两个类之间的通信。

Objective-C 类目和延展

版权说明:本文为原创文章,未经允许,不得转载。

类目 (Category)

1.基本概念

当需要在一个已封装的类中添加方法时,可以不在该类中做修改或定义一个子类,只需在用到该方法时,添加一个该类的类目(category)即可。

· 在类目中定义的方法,会成为原始类的一部分,与其他方法的调用没有区别。
· 通过给父类定义类目方法,其子类也会继承这些方法。