iOS编程:学习篇(四)

来源:互联网 发布:淘宝如何查看开店时长 编辑:程序博客网 时间:2024/06/05 04:56

Chapter 2 续

类方法

从语法上看,类方法的声明和实例方法的声明不同,差别在于第一个字符。在返回类型的前面,实例方法使用的是字符 -,而类方法使用的是字符 +。
Tips:头文件声明顺序:实例变量声明应该写在最前面,然后是类文件,接下来是初始化方法,最后是其他方法。这种排序是一种约定。

+ (instancetype)randomItem{    // 创建不可变数组,包含三个形容词    NSArray *randomAdjectiveList = @[@"Fluffy", @"Rusty", @"Shiny"];    // 创建不可变数组对象,包含三个形容词    NSArray *randomNounList = @[@"Bear", @"Spork", @"Mac"];    // 根据数组对象的个数,得到随机索引    NSInteger adjectiveIndex = arc4random() % [randomAdjectiveList count];    NSInteger nounIndex = arc4random() %[randomAdjectiveList count];    NSString *randomName = [NSString stringWithFormat:@"%@ %@",                            [randomAdjectiveList objectAtIndex:adjectiveIndex],[randomNounList objectAtIndex:nounIndex]];    int randomValue = arc4random() % 100;    NSString *randomSerialNumber = [NSString stringWithFormat:@"%c%c%c%c%c",                                    '0' + arc4random() % 10,                                    'A' + arc4random() % 26,                                    '0' + arc4random() % 10,                                    'A' + arc4random() % 26,                                    '0' + arc4random() % 10];    Item *newItem = [[self alloc] initWithItemName:randomName valueInDollars:randomValue serialNumber:randomSerialNumber];    return newItem;}

Tips:创建数组的语法——“@“符号后面加上一对方括号,数组中的对象写在括号里,用逗号隔开。这种语法只能创建不可变数组,如果要使用可变数组,则不能使用这种语法。
Objective-C中,如果某个类方法的返回类型是这个类的对象,就可以将这种类方法成为便捷方法。

深入学习NSArray与NSMutableArray

数组对象只能保存指向Objective-C对象的指针,所以不能将基本类型的变量或C结构加入数组对象。如果要将基本类型的变量和C结构加入数组,可以先将它们“包装“成Objective-C对象。

异常与未知选择器

Objective-C对象都有一个名为isa的实例变量,对象通过可以通过自己的isa知道自身的类型。类在创建了一个对象后,会为新创建的对象的isa实例变量赋值,将其只回自己,即创建该对象的类。
对象只能响应类中具有相应实现方法的消息。而对象的类型又只能在运行时才能确定,因此Xcode无法在编译判断某个对象是否能响应特定的消息。如果Xcode判断应用会向某个对象类发送其无法响应的消息,就会显示相应的警告信息,但是代码仍然能够编译通过。如果应该最后想某个对象发送了其无法响应的消息,那么程序就会抛出异常(expection)。异常也成为运行时错误,因为异常辉仔应用运行时才会出现。

如何为类命名

Objective-C没有提供名字空间(namespace)机制,为了更好的区分,需要为类名增加前缀。

深入学习:#import和@import

@import Foundation告诉编译器需要使用Foundation框架,之后编译器会优化预编译头文件和缓存编译结果的过程。
Tips:只有苹果提供的框架可以使用@import,如果需要导入自己编写的类和框架,只能使用#import

0 0
原创粉丝点击