iPhone开发进阶(1)

博主: 易飞扬 原文链接 :  http://www.yifeiyang.net/iphone-development-advanced-1-depth-understanding-of-iphone-os-sdk-and-objective-c-2-0/ 转载请保留上面文字。

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一下,就又回到了刚才退出时的状态。下面是一个例子:

 

// MyKeyedArchiver.h
#import <Cocoa/Cocoa.h>

@interface NSKeyedArchiver (MyKeyedArchiver)

- (void)encodeValueOfObjCType:(const char *)valueType at:(const void *)address;

@end

 

#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

 

 

// MyKeyedUnarchiver.h
#import <Cocoa/Cocoa.h>

@interface NSKeyedUnarchiver (MyKeyedUnarchiver)

- (void)decodeValueOfObjCType:(const char *)valueType at:(void *)data;

@end

 

 

#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

 

转载于:https://www.cnblogs.com/missna/archive/2010/10/08/1845918.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值