IOS编程第四版第二章:Objective-C
2015-06-28 20:18
549 查看
本章通过一个由浅入深的例子,简洁地介绍了Objective-c的类和初始化
涉及知识点:
1. 用for(xxxx in xxx) 快速迭代的方法需要注意:不能使用它去在集合中增加或删除Objects。如果需要这样做,要使用普通for循环
2. %@必须对应一个对象,这是因为每个对象都有一个desciption方法。
3. 类方法通常用来创建一个类的新的实例或者访问一些类的全局属性。 类方法不操作对象,也不能访问实例变量。
4. 关于初始化方法的简单规则
一个类继承所有父类的初始化方法并且可以有任意多个自己的初始化方法
每个类制定一个初始化方法为指定的初始化方法。
这个指定初始化方法必须在其内部最开始的地方先调用其父类的指定初始化方法
这个类其他的初始化方法都调用这个指定的初始化方法
如果这个类的指定初始化方法跟父类的指定初始化方法不同,则必须重写父类的指定初始化方法。
指定初始化方法通常是那个初始化最多实例变量的那个初始化方法。
5. 注意头文件中声明的顺序
先是实例变量,然后是类方法,初始化方法,实例方法。 这种顺序让头文件更加好读。
6. NSArray可以包含不同类型的对象。
但是它不能包含基本类型和c 结构类型的数据,如果非要这么做,需要类型转换成NSNumber, NSValue和NSData.
不能使用nil作为数组元素插入数组。要使用[items addObject:[NSNull null]];
数组可以使用短操作符代替长消息来访问数组内的元素
如:NSString *foo = item[0] is equuivalent to NSString *foo = [item objectAtIndex: 0];
它也同样适用与可变数组。
本章实现代码如下:
Item.h
Item.m
main.m测试文件
源码地址:https://github.com/ianzhengnan/RandomItem
涉及知识点:
1. 用for(xxxx in xxx) 快速迭代的方法需要注意:不能使用它去在集合中增加或删除Objects。如果需要这样做,要使用普通for循环
2. %@必须对应一个对象,这是因为每个对象都有一个desciption方法。
3. 类方法通常用来创建一个类的新的实例或者访问一些类的全局属性。 类方法不操作对象,也不能访问实例变量。
4. 关于初始化方法的简单规则
一个类继承所有父类的初始化方法并且可以有任意多个自己的初始化方法
每个类制定一个初始化方法为指定的初始化方法。
这个指定初始化方法必须在其内部最开始的地方先调用其父类的指定初始化方法
这个类其他的初始化方法都调用这个指定的初始化方法
如果这个类的指定初始化方法跟父类的指定初始化方法不同,则必须重写父类的指定初始化方法。
指定初始化方法通常是那个初始化最多实例变量的那个初始化方法。
5. 注意头文件中声明的顺序
先是实例变量,然后是类方法,初始化方法,实例方法。 这种顺序让头文件更加好读。
6. NSArray可以包含不同类型的对象。
但是它不能包含基本类型和c 结构类型的数据,如果非要这么做,需要类型转换成NSNumber, NSValue和NSData.
不能使用nil作为数组元素插入数组。要使用[items addObject:[NSNull null]];
数组可以使用短操作符代替长消息来访问数组内的元素
如:NSString *foo = item[0] is equuivalent to NSString *foo = [item objectAtIndex: 0];
它也同样适用与可变数组。
本章实现代码如下:
Item.h
#import <Foundation/Foundation.h> @interface Item : NSObject { NSString *_itemName; NSString *_serialNumber; int _valueInDollars; NSDate *_dateCreated; } + (instancetype)randomItem; // Designated initializer for BNRItem - (instancetype)initWithItemName:(NSString *)name valueInDollars:(int)value serialNumber:(NSString *)sNumber; - (instancetype)initWithItemName:(NSString *)name; - (void)setItemName:(NSString *)str; - (NSString *)itemName; - (void)setSerialNumber:(NSString *)str; - (NSString *)serialNumber; - (void)setValueInDollars: (int)v; - (int)valueInDollars; - (NSDate *)dateCreated; @end
Item.m
// // Item.m // RandomItems // // Created by zhengnan on 15/6/27. // Copyright (c) 2015年 zhengnan. All rights reserved. // #import "Item.h" @implementation Item + (instancetype)randomItem{ NSArray *randomAdjectiveList = @[@"Fluffy", @"Rusty", @"Shiny"]; NSArray *randomNounList = @[@"Bear", @"Spork", @"Mac"]; NSInteger adjectiveIndex = arc4random() % randomAdjectiveList.count; NSInteger nounIndex = arc4random() % randomNounList.count; NSString *randomName = [NSString stringWithFormat:@"%@ %@", randomAdjectiveList[adjectiveIndex], randomNounList[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; } - (instancetype)initWithItemName:(NSString *)name valueInDollars:(int)value serialNumber:(NSString *)sNumber{ self = [super init]; if(self){ _itemName = name; _serialNumber = sNumber; _valueInDollars = value; _dateCreated = [[NSDate alloc] init]; } return self; } - (instancetype)initWithItemName:(NSString *)name{ return [self initWithItemName:name valueInDollars:0 serialNumber:@""]; } - (instancetype)init{ return [self initWithItemName:@"Item"]; } - (void)setItemName:(NSString *)str{ _itemName = str; } - (NSString *)itemName{ return _itemName; } - (void)setSerialNumber:(NSString *)str{ _serialNumber = str; } - (NSString *)serialNumber{ return _serialNumber; } - (void)setValueInDollars:(int)v{ _valueInDollars = v; } - (int)valueInDollars{ return _valueInDollars; } - (NSDate *)dateCreated{ return _dateCreated; } - (NSString *)description{ NSString *descriptionString = [[NSString alloc] initWithFormat:@"%@ (%@): Worth $%d, recored on %@", self.itemName, self.serialNumber, self.valueInDollars, self.dateCreated]; return descriptionString; } @end
main.m测试文件
// // main.m // RandomItems // // Created by zhengnan on 15/6/27. // Copyright (c) 2015年 zhengnan. All rights reserved. // #import <Foundation/Foundation.h> #import "Item.h" int main(int argc, const char * argv[]) { @autoreleasepool { NSMutableArray *items = [[NSMutableArray alloc] init]; for (int i = 0; i < 10; i++) { Item *item = [Item randomItem]; [items addObject:item]; } for (Item *item in items) { NSLog(@"%@", item); } //Destroy the mutable array object items = nil; } return 0; }
源码地址:https://github.com/ianzhengnan/RandomItem
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 一个简单的asp数据库操作类
- C#实现用于操作wav声音文件的类实例
- 在线管理数据库 类
- Lua面向对象之类和继承浅析
- Lua中类的实现原理探讨(Lua中实现类的方法)
- Lua中的类编程代码实例
- C#常用目录文件操作类实例
- c# 类和成员的修饰详细介绍
- C#中实现判断某个类是否实现了某个接口
- C#类的创建与初始化实例解析
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- c#结构和类的相关介绍