iPhone开发进阶(1) — 深入理解iPhone OS/SDK与Objective-C 2.0
来源:互联网 发布:淘宝男士棉拖鞋 编辑:程序博客网 时间:2024/04/29 06:26
- 内存管理
- 容器
- Notification
- 归档(Archive)
iPhone开发进阶(1) --- 深入理解iPhone OS/SDK与Objective-C 2.0
工欲善其事,必先利其器。在开发iPhone应用程序的时候,深入理解iPhone OS/SDK与Objective-C 2.0是很重要的。
iPhone OS
iPhone OS 由4个主要部分组成。下面简单地罗列一下它们的功能。
- Cocoa Touch
- 窗口和视图
- 事件管理
- 用户接口
- 加速传感器
- 照相机
- Media
- Core Graphics(2维图形接口)
- Core Animation(动画)
- OpenGL
- Core Audio(声音)
- OpenAL
- Media Player(MPEG4,MP3)
- Core Services
- Address Book
- Core Foundation
- Core Location
- CFNetwork(http,https,ftp,SSL,TLS)
- 网络安全
- SQLite(SQL数据库)
- XML
- Core OS
- 多线程
- 网络应用(BSD套接字)
- 文件系统
- Bonjour(利用无线网络连接其他机器)
iPhone SDK
iPhone SDK 中主要包含下列4个工具。
- Xcode - 项目管理、代码编辑、编译、调试(IDE)
- Interface Builder - GUI 设计
- iPhone Simulator - 模拟器
- Instrument - 性能测试、调整
实际开发的过程中,基本上是在使用 Xcode 与 Interface Builder 来进行的。调试则是使用模拟器或者实际设备。要注意的是在PC上模拟程序,由于PC的主频,性能高于实际设备,所以不能只在模拟器上调试。除此之外,一些类,功能在模拟器上也是不能使用的,比如 NSDateCalendar 类,或者是照相机功能。
Objective-C 2.0
内存管理
虽然 Objective-C 2.0 已经支持了垃圾收集了,但是 iPhone OS 中却不能使用它。所以我们需要自己来管理内存。Objective-C 的内存管理方式与使用引用计数的方式,就是说对象有一个计数器,引用对象一次,计数器加一,当计数器为0的时候,该对象的内存被释放。
创建对象实例的时候(init,alloc)应用计数加一,执行过程中,别的对象如果需要该对象,需要用(retain)来引用它,这时,该对象的应用计数器加一。不需要对象的时候用(release)来释放,这时引用计数器减一,当计数器为0的时候,释放该对象内存。
- init,alloc - 计数器 +1
- retain - 计数器 +1
- release - 计数器 -1
另外如果不使用 retain,release,可以使用(autorelease)来自动释放对象。
容器
Objective-C 中的容器主要有以下3种:
- 数组
- 字典
- Set
向容器中添加的内容不能直接用 int 或 float,需要通过 NSNumber 等封装类来实现。Objective-C 2.0 开始可以使用迭代子(Enumerator),来顺序访问容器中的元素。
Notification
Notification是消息通知的功能。具体使用 NSNotificationCenter 类。将需要接受通知的对象,方法,事件注册到该类上。
归档(Archive)
归档是指将对象的内存布局原样地保存到文件系统上。同样对应的由文件中的数据生成对象叫做UnAchive。在 iPhone SDK 中使用 NSKeyedArchiver 和 NSKeyedUnarchiver 类来实现。
一般在程序结束的时候,保存当前的状态,再次启动的时候UnAchive一下,就又回到了刚才退出时的状态。下面是一个例子:
12345678
// MyKeyedArchiver.h#import <Cocoa/Cocoa.h>@interface NSKeyedArchiver (MyKeyedArchiver)- (void)encodeValueOfObjCType:(const char *)valueType at:(const void *)address;@end
123456789101112131415
#import "MyKeyedArchiver.h"@implementation NSKeyedArchiver (MyKeyedArchiver)- (void)encodeValueOfObjCType:(const char *)valueType at:(const void *)address{ NSMutableData *datas = [NSMutableData data]; NSArchiver *arch = [[NSArchiver alloc] initForWritingWithMutableData:datas]; [arch encodeValueOfObjCType:valueType at:address]; [self encodeObject:[NSData dataWithData:datas]]; [arch release];}@end
12345678
// MyKeyedUnarchiver.h#import <Cocoa/Cocoa.h>@interface NSKeyedUnarchiver (MyKeyedUnarchiver)- (void)decodeValueOfObjCType:(const char *)valueType at:(void *)data;@end
1234567891011121314
#import "MyKeyedUnarchiver.h"@implementation NSKeyedUnarchiver (MyKeyedUnarchiver)- (void)decodeValueOfObjCType:(const char *)valueType at:(void *)data{ NSData *datas = [self decodeObject]; NSUnarchiver *unarch = [[NSUnarchiver alloc] initForReadingWithData:datas]; [unarch decodeValueOfObjCType:valueType at:data]; [unarch release];}@end
- iPhone开发进阶(1) — 深入理解iPhone OS/SDK与Objective-C 2.0
- iPhone开发进阶(1) — 深入理解iPhone OS/SDK与Objective-C 2.0
- iPhone开发进阶(1) --- 深入理解iPhone OS/SDK与Objective-C 2.0
- ios学习--Objective C内存管理进阶(一): Iphone开发内存管理的理解
- iPhone开发入门(6)— Action与Objective-C
- iPhone开发入门(6)--- Action与Objective-C
- iPhone SDK开发之 objective C property属性详解
- iPhone SDK开发 objective C property属性详解
- iPhone SDK开发 objective C property属性详解
- iPhone开发-Objective-C (转)---上
- iPhone 开发 (七)Objective-C 学习
- iPhone开发-Objective-C ---上
- iPhone开发入门(2)—从iPhone SDK开始
- iPhone开发入门(2)—从iPhone SDK开始
- Objective-C 语言教程(苹果开发,iPhone开发必备)
- iPhone开发入门守则:Objective-C编码规范(1)
- 菜鸟学iPhone开发-Objective-C(转)---中
- 菜鸟学iPhone开发-Objective-C(转)---下
- Oracle和MySQL、PostgreSQL特性对比
- 进程的创建 —— do_fork()函数详解
- magento -- 推荐插件 -- Mass Product Relater
- poj 3468 线段树对一个区间加减和求和
- 详解Linux下Oracle的静默安装
- iPhone开发进阶(1) — 深入理解iPhone OS/SDK与Objective-C 2.0
- iPhone开发进阶(2) — iPhone应用程序/项目的构成
- 人体电压
- 开发人员一定要加入收藏夹的网站
- iPhone开发进阶(3) — iPhone应用程序的启动过程
- 更快的高质量图像缩放getFasterScaledInstance,来自Filthy Rich Clients
- 加油!
- 如何在 Win7中“设置备份”
- iPhone开发进阶(4) — 使用Makefile自动编译iPhone程序