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

1
2
3
4
5
6
7
8
// MyKeyedArchiver.h
#import <Cocoa/Cocoa.h>@interface NSKeyedArchiver (MyKeyedArchiver)- (void)encodeValueOfObjCType:(const char *)valueType at:(const void *)address;@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#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:valueTypeat:address];[self encodeObject:[NSData dataWithData:datas]];[arch release];
}@end
1
2
3
4
5
6
7
8
// MyKeyedUnarchiver.h
#import <Cocoa/Cocoa.h>@interface NSKeyedUnarchiver (MyKeyedUnarchiver)- (void)decodeValueOfObjCType:(const char *)valueType at:(void *)data;@end
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#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:valueTypeat:data];[unarch release];
}@end

posted on 2012-02-03 14:36 YamateDD 阅读(...) 评论(...) 编辑 收藏

转载于:https://www.cnblogs.com/dongxiaoyu/archive/2012/02/03/2337048.html

iPhone开发进阶(1) --- 深入理解iPhone OS/SDK与Objective-C 2.0相关推荐

  1. iPhone开发进阶(9)--- 用SQLite管理数据库

    博主:易飞扬 原文链接 : http://www.yifeiyang.net/iphone-developer-advanced-9-management-database-using-sqlite/ ...

  2. iPhone开发四剑客之《iPhone开发秘籍》

    媒体评论 "难以想象,竟然有人还没有读Erica Sadun的书就开始从事iPhone商业开发--本书将使你成为AppStore上用户热捧的那种五星级开发者." -- InfoWo ...

  3. iPhone 开发中心 论坛 与 视频

    苹果开发者联盟 - iPhone 开发中心  http://www.apple.com.cn/developer/iphone/  http://developer.apple.com/devcent ...

  4. iPhone开发入门

    首先我们得成为注册ADC会员,这个是免费的,并且可以获得很多开发资料. http://developer.apple.com/iphone/program/start/register/ 上面是注册地 ...

  5. iPhone 开发基础教程

    Phone 开发基础教程之 在开始编写iPhone软件之前,需要做一些准备工作.对于初学者,需要一台运行Leopard(OS X 10.5.3或更高版本)的基于Intel的Macintosh计算机.2 ...

  6. iPhone开发入门(1)—-程序员眼中的iPhone

    http://blog.csdn.net/itudou_2010/article/details/5492272 iPhone开发入门(1)--程序员眼中的iPhone 博主:易飞扬 原文链接 : h ...

  7. iphone 开发随笔

    这两天继续看了iphone开发秘籍这本书,由于书上介绍的是xcode 3.0 的版本,而我的xcode的版本是4.2,想实践下,总体问题多多 最明显的问题是,xcode 4.2为按钮绑定事件,已经跟x ...

  8. linux apple开发环境,Linux上构筑iPhone OS3.1.2开发环境 实例操作

    Linux上构筑iPhoneOS3.1.2开发环境 实例操作是本文要介绍的内容,开发iPhone应用程序标准的环境配置是基于intel Mac的.虽说现在Mac很便宜,但是仍然大部分人仍然在用wind ...

  9. Iphone开发(7) 太你妈辛苦了

    把你妹啊,现在终于知道为什么做IPhone开发工资高了--因为学习IPhone开发太难⋯⋯ 1.学习IPhone开发,首先要一台mac的电脑,但是有多少程序员,关键还是初步学习IPhone开发的程序员 ...

最新文章

  1. 教师编学科知识计算机,教师考试信息技术学科知识考什么_谈信息技术学科教师应该怎样教学...
  2. 巧用Linux命令完成统计排序功能yes2
  3. 同样是面对失败的责任:任春雷比杜一楠更有种
  4. PTA-7-8 删除重复字符 (20分)(C语言)
  5. AI 重塑 IT 的 5 种方式
  6. 习惯了的几个火狐插件
  7. 数据库多表查询的几种方法
  8. 佛系宿华和他的“信任电商”伪命题
  9. CVPR 2021 Oral | 妙啊!不怕遮挡的图像线段匹配 SOLD2,还能联合自监督线段检测
  10. 计算机科学 在职双证,计算机在职研究生有双证吗
  11. AES加密解密算法的C代码实现
  12. node.js的下载安装详细步骤(还有安装配套的express、淘宝镜像、webpack、Vue)
  13. css3帧(雪碧图)动画实现
  14. 【分享贴】高中数学教师资格证面试经验分享贴
  15. 【Python案例】基于Pygame黑白棋游戏(附源码)
  16. 「HTML+CSS」--自定义加载动画【027】
  17. linux exp parfile用法,逻辑备份与恢复-使用EXP进行逻辑备份
  18. 【一牛网科大讯飞】AIUI评估板免费赠?讯飞评测活动告诉你:有戏!
  19. 阿里花500万年薪招天才黑客?官方回应:这种人得交给警察
  20. 数据可视化 理论知识(2)时间数据可视化

热门文章

  1. Kali 装机之后的各种操作
  2. Go 语言标准库中 atomic.Value
  3. c++ 标准库中 cin.ignore()
  4. 编译器在处理const变量跟一般变量时的区别
  5. ubuntu 18.04安装jdk8和eclipse
  6. [BUUCTF-pwn]——warmup_csaw_2016
  7. 手把手教你安装VMtools
  8. ActionBarActionMode的理解,出现菜单栏
  9. html中的点击事件
  10. 35-面试:如何找出字符串的字典序全排列的第N种