繁體中文 English 用户名: 密码: 忘记密码? 登陆 注册
首页 | 新闻 | 交流 | 问吧 | 文档 | 手册 | 下载 | 博客 文档问吧交流PHP函数下载全站搜索标题 全文 热门搜索 域名注册 虚拟主机 |
-
- 我是站长网,站长好帮手
- 网站征服者,建站好去处
- favicon制作,favicon.ico在线制作
- 联系我们获取你的广告链接>>>
iPhone sdk4 编程 作者: sxcong 时间: 2010-08-05 一 安装
1 下载安装vmware7
2 修改BIOS设置,支持VT.(一般,CPU要E6400以上,主板有虚拟化选项)
3 下载安装Mac OS 10.6.2 (也可以直接下载已经安装好的虚拟机文件,如easystudio的)
4 在mac os上配置共享,支持ftp,ssh访问。然后用pytty测试一下。
5 去苹果网站,注册用户,登录,然后下载iPhone sdk4,2G多.非常难下,在本机上用迅雷等工具都不行,最后直接用firefox打开链接下载,竟然完整下载成功。
6 用ftp或sftp把dmg传到mac虚拟机止,双击安装,注意记住安装路经。
7 安装结束后,在安装的硬盘下面,Developer/Applications下有Xcode,双击运行,新建项目,随便选一个类型(教程上比较多的是View),然后选Build and run,编译运行,会出现iPhone模拟器,上面运行一个空画面的程序,致此,安装成功。
二 开发
1 UI方面,看起来和VB6最象。如果做过MFC,QT,Delphi,BCB等编程,理解起来很容易。主要就是利用SDK提供的类库操作控件写程序。只要注意缺省环境是Object C。
2 线程
sdk中有封装好的线程类,不过我感觉,如果是Linux或FreeBSD编程很熟悉的,直接用pthread可能更好。
3 socket编程
同上,虽然有封装好的类库,但BSD socket用起来真方便,Linux上的程序基本可以直接拿过来使用。
4 混合编程
从艺术角度上来看,Object C和iPhone SDK完美结合,做出的产品漂亮,写的代码也整齐。不过,我的意见是实用为王。如果原来在Linux或FreeBSD下有代码积累的话,也不用重写了,仔细检查一下内存等占用情 况,直接拿过来就好了。反正苹果的编译器完美支持Ojbect C和标准C的语法,只要自己分成不同的文档,或不同的目录结构就行了。
比如,以网络功能为例,下载网页可以用iPhone的SDK:
NSData *dataReply = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
通过socket接收和发送文件,因为服务器是Linux,客户端包括Linux,Windows,代码最好保持一致,就使用bsd socket,如:
struct sockaddr_in soapAddr;
//1 创建soap socket
if ((soap_sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("create soap error");
return -1;
}
else
{
printf("create soap ok\n");
}
//2 连接soap server
memset(&soapAddr,0,sizeof(soapAddr));
char* szHostAddr = "xxx.xxx.com";
soapAddr.sin_family = AF_INET;
soapAddr.sin_addr.s_addr = inet_addr(szHostAddr);
if (INADDR_NONE == soapAddr.sin_addr.s_addr)
{
struct hostent *lphost = gethostbyname(szHostAddr);
if (lphost != NULL)
soapAddr.sin_addr.s_addr = ((struct in_addr*)lphost->h_addr)->s_addr;
else
{
return -1;
}
}
soapAddr.sin_port = htons(7070);//IM port
if (connect(soap_sock, (struct sockaddr *)&soapAddr, sizeof(soapAddr)) <0 )
{
printf("connect error\n");
return -2;
}
else
{
printf("connect ok\n");
}
//创建接收线程
int res;
pthread_t sock_thread;
res&#61;pthread_create(&sock_thread, NULL, sock_recv, NULL);
线程内循环recv
//发送数据
send(fd, buffer, left_length, 0);
这些代码&#xff0c;在Linux&#xff0c;Windows的VC&#43;&#43;都正常运行(VC使用pthread也有可用的开源库)。移到iPhone上同样可以运行&#xff0c;所以&#xff0c;也就不必用iPhone SDK封装的NSStream,NFSocket等类库了。
当然&#xff0c;如果程序只在Mac环境下运行&#xff0c;暂时没有其他平台的使用&#xff0c;那还是用SDK最安全。
虽然号称是iPhone开发&#xff0c;但实际上只做了一个简单的界面&#xff0c;只用了短短几天时间就把Linux上的sip和IM(没用到任何臃肿的开源库&#xff0c;自己用C语言实现的最常用功能的协议栈)等程序移植到iPhone上&#xff0c;做成了一个简单的voip软电话(语音视频的播放肯定是有SDK的&#xff0c;但网络传输&#xff0c;封包组包完全不用重写&#xff0c;直接搬过来)。
所以&#xff0c;iPhone开发&#xff0c;实际上就是c语言调用iPhone sdk开发。如果C语言掌握熟练&#xff0c;对Linux或FreeBSD系统也熟悉&#xff0c;学起来也很快。
三 注意点
1 iPhone 4 SDK和Xcode环境有些变化&#xff0c;网上很多教程(很多网站互相抄&#xff0c;内容严重雷同&#xff0c;错误也多。建议直接看Apple文档)有些部分已经不能用&#xff0c;比如outlet和action的添加。
2 写网络程序时注意网络字节序&#xff0c;ntohl, htonl等转换是必须的。
3 涉及到字符串建议都采用unicode。
4 资源有限&#xff0c;内存需要节省使用&#xff0c;栈空间更要注意。还好是用C开发&#xff0c;自己可以控制。如果是JAVA&#xff0c;不深入研究的话&#xff0c;真不知道数据和堆栈怎么使用的&#xff0c;当然程序员也不需要关心&#xff0c;大不了直接让厂家多放点内存就行了。
5 虚拟机开发不太方便&#xff0c;如果准备长期做iPhone项目&#xff0c;建议采用iMac一体机做开发&#xff0c;mac笔记本屏幕太小&#xff0c;iMac可以22寸的&#xff0c;而且是4&#xff1a;3。(顺便严重鄙视一下宽屏显示器&#xff0c;本质就是面板缩水再骗用户)。
作者: sxcong 时间: 2010-08-05
一 安装
1 下载安装vmware7
2 修改BIOS设置&#xff0c;支持VT.(一般&#xff0c;CPU要E6400以上&#xff0c;主板有虚拟化选项)
3 下载安装Mac OS 10.6.2 (也可以直接下载已经安装好的虚拟机文件&#xff0c;如easystudio的)
4 在mac os上配置共享&#xff0c;支持ftp,ssh访问。然后用pytty测试一下。
5 去苹果网站&#xff0c;注册用户&#xff0c;登录&#xff0c;然后下载iPhone sdk4&#xff0c;2G多.非常难下&#xff0c;在本机上用迅雷等工具都不行&#xff0c;最后直接用firefox打开链接下载&#xff0c;竟然完整下载成功。
6 用ftp或sftp把dmg传到mac虚拟机止&#xff0c;双击安装&#xff0c;注意记住安装路经。
7 安装结束后&#xff0c;在安装的硬盘下面&#xff0c;Developer/Applications下有Xcode&#xff0c;双击运行&#xff0c;新建项目&#xff0c;随便选一个类型(教程上比较多的是View)&#xff0c;然后选Build and run&#xff0c;编译运行&#xff0c;会出现iPhone模拟器&#xff0c;上面运行一个空画面的程序&#xff0c;致此&#xff0c;安装成功。
二 开发
1 UI方面&#xff0c;看起来和VB6最象。如果做过MFC&#xff0c;QT&#xff0c;Delphi&#xff0c;BCB等编程&#xff0c;理解起来很容易。主要就是利用SDK提供的类库操作控件写程序。只要注意缺省环境是Object C。
2 线程
sdk中有封装好的线程类&#xff0c;不过我感觉&#xff0c;如果是Linux或FreeBSD编程很熟悉的&#xff0c;直接用pthread可能更好。
3 socket编程
同上&#xff0c;虽然有封装好的类库&#xff0c;但BSD socket用起来真方便&#xff0c;Linux上的程序基本可以直接拿过来使用。
4 混合编程
从艺术角度上来看&#xff0c;Object C和iPhone SDK完美结合&#xff0c;做出的产品漂亮&#xff0c;写的代码也整齐。不过&#xff0c;我的意见是实用为王。如果原来在Linux或FreeBSD下有代码积累的话&#xff0c;也不用重写了&#xff0c;仔细检查一下内存等占用情 况&#xff0c;直接拿过来就好了。反正苹果的编译器完美支持Ojbect C和标准C的语法&#xff0c;只要自己分成不同的文档&#xff0c;或不同的目录结构就行了。
比如&#xff0c;以网络功能为例&#xff0c;下载网页可以用iPhone的SDK&#xff1a;
NSData *dataReply &#61; [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
通过socket接收和发送文件&#xff0c;因为服务器是Linux,客户端包括Linux,Windows&#xff0c;代码最好保持一致&#xff0c;就使用bsd socket,如:
struct sockaddr_in soapAddr;
//1 创建soap socket
if ((soap_sock &#61; socket(AF_INET, SOCK_STREAM, 0)) &#61;&#61; -1)
{
perror("create soap error");
return -1;
}
else
{
printf("create soap ok\n");
}
//2 连接soap server
memset(&soapAddr,0,sizeof(soapAddr));
char* szHostAddr &#61; "xxx.xxx.com";
soapAddr.sin_family &#61; AF_INET;
soapAddr.sin_addr.s_addr &#61; inet_addr(szHostAddr);
if (INADDR_NONE &#61;&#61; soapAddr.sin_addr.s_addr)
{
struct hostent *lphost &#61; gethostbyname(szHostAddr);
if (lphost !&#61; NULL)
soapAddr.sin_addr.s_addr &#61; ((struct in_addr*)lphost->h_addr)->s_addr;
else
{
return -1;
}
}
soapAddr.sin_port &#61; htons(7070);//IM port
if (connect(soap_sock, (struct sockaddr *)&soapAddr, sizeof(soapAddr)) <0 )
{
printf("connect error\n");
return -2;
}
else
{
printf("connect ok\n");
}
//创建接收线程
int res;
pthread_t sock_thread;
res&#61;pthread_create(&sock_thread, NULL, sock_recv, NULL);
线程内循环recv
//发送数据
send(fd, buffer, left_length, 0);
这些代码&#xff0c;在Linux&#xff0c;Windows的VC&#43;&#43;都正常运行(VC使用pthread也有可用的开源库)。移到iPhone上同样可以运行&#xff0c;所以&#xff0c;也就不必用iPhone SDK封装的NSStream,NFSocket等类库了。
当然&#xff0c;如果程序只在Mac环境下运行&#xff0c;暂时没有其他平台的使用&#xff0c;那还是用SDK最安全。
虽然号称是iPhone开发&#xff0c;但实际上只做了一个简单的界面&#xff0c;只用了短短几天时间就把Linux上的sip和IM(没用到任何臃肿的开源库&#xff0c;自己用C语言实现的最常用功能的协议栈)等程序移植到iPhone上&#xff0c;做成了一个简单的voip软电话(语音视频的播放肯定是有SDK的&#xff0c;但网络传输&#xff0c;封包组包完全不用重写&#xff0c;直接搬过来)。
所以&#xff0c;iPhone开发&#xff0c;实际上就是c语言调用iPhone sdk开发。如果C语言掌握熟练&#xff0c;对Linux或FreeBSD系统也熟悉&#xff0c;学起来也很快。
三 注意点
1 iPhone 4 SDK和Xcode环境有些变化&#xff0c;网上很多教程(很多网站互相抄&#xff0c;内容严重雷同&#xff0c;错误也多。建议直接看Apple文档)有些部分已经不能用&#xff0c;比如outlet和action的添加。
2 写网络程序时注意网络字节序&#xff0c;ntohl, htonl等转换是必须的。
3 涉及到字符串建议都采用unicode。
4 资源有限&#xff0c;内存需要节省使用&#xff0c;栈空间更要注意。还好是用C开发&#xff0c;自己可以控制。如果是JAVA&#xff0c;不深入研究的话&#xff0c;真不知道数据和堆栈怎么使用的&#xff0c;当然程序员也不需要关心&#xff0c;大不了直接让厂家多放点内存就行了。
5 虚拟机开发不太方便&#xff0c;如果准备长期做iPhone项目&#xff0c;建议采用iMac一体机做开发&#xff0c;mac笔记本屏幕太小&#xff0c;iMac可以22寸的&#xff0c;而且是4&#xff1a;3。(顺便严重鄙视一下宽屏显示器&#xff0c;本质就是面板缩水再骗用户)。
1 下载安装vmware7
2 修改BIOS设置&#xff0c;支持VT.(一般&#xff0c;CPU要E6400以上&#xff0c;主板有虚拟化选项)
3 下载安装Mac OS 10.6.2 (也可以直接下载已经安装好的虚拟机文件&#xff0c;如easystudio的)
4 在mac os上配置共享&#xff0c;支持ftp,ssh访问。然后用pytty测试一下。
5 去苹果网站&#xff0c;注册用户&#xff0c;登录&#xff0c;然后下载iPhone sdk4&#xff0c;2G多.非常难下&#xff0c;在本机上用迅雷等工具都不行&#xff0c;最后直接用firefox打开链接下载&#xff0c;竟然完整下载成功。
6 用ftp或sftp把dmg传到mac虚拟机止&#xff0c;双击安装&#xff0c;注意记住安装路经。
7 安装结束后&#xff0c;在安装的硬盘下面&#xff0c;Developer/Applications下有Xcode&#xff0c;双击运行&#xff0c;新建项目&#xff0c;随便选一个类型(教程上比较多的是View)&#xff0c;然后选Build and run&#xff0c;编译运行&#xff0c;会出现iPhone模拟器&#xff0c;上面运行一个空画面的程序&#xff0c;致此&#xff0c;安装成功。
二 开发
1 UI方面&#xff0c;看起来和VB6最象。如果做过MFC&#xff0c;QT&#xff0c;Delphi&#xff0c;BCB等编程&#xff0c;理解起来很容易。主要就是利用SDK提供的类库操作控件写程序。只要注意缺省环境是Object C。
2 线程
sdk中有封装好的线程类&#xff0c;不过我感觉&#xff0c;如果是Linux或FreeBSD编程很熟悉的&#xff0c;直接用pthread可能更好。
3 socket编程
同上&#xff0c;虽然有封装好的类库&#xff0c;但BSD socket用起来真方便&#xff0c;Linux上的程序基本可以直接拿过来使用。
4 混合编程
从艺术角度上来看&#xff0c;Object C和iPhone SDK完美结合&#xff0c;做出的产品漂亮&#xff0c;写的代码也整齐。不过&#xff0c;我的意见是实用为王。如果原来在Linux或FreeBSD下有代码积累的话&#xff0c;也不用重写了&#xff0c;仔细检查一下内存等占用情 况&#xff0c;直接拿过来就好了。反正苹果的编译器完美支持Ojbect C和标准C的语法&#xff0c;只要自己分成不同的文档&#xff0c;或不同的目录结构就行了。
比如&#xff0c;以网络功能为例&#xff0c;下载网页可以用iPhone的SDK&#xff1a;
NSData *dataReply &#61; [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error];
通过socket接收和发送文件&#xff0c;因为服务器是Linux,客户端包括Linux,Windows&#xff0c;代码最好保持一致&#xff0c;就使用bsd socket,如:
struct sockaddr_in soapAddr;
//1 创建soap socket
if ((soap_sock &#61; socket(AF_INET, SOCK_STREAM, 0)) &#61;&#61; -1)
{
perror("create soap error");
return -1;
}
else
{
printf("create soap ok\n");
}
//2 连接soap server
memset(&soapAddr,0,sizeof(soapAddr));
char* szHostAddr &#61; "xxx.xxx.com";
soapAddr.sin_family &#61; AF_INET;
soapAddr.sin_addr.s_addr &#61; inet_addr(szHostAddr);
if (INADDR_NONE &#61;&#61; soapAddr.sin_addr.s_addr)
{
struct hostent *lphost &#61; gethostbyname(szHostAddr);
if (lphost !&#61; NULL)
soapAddr.sin_addr.s_addr &#61; ((struct in_addr*)lphost->h_addr)->s_addr;
else
{
return -1;
}
}
soapAddr.sin_port &#61; htons(7070);//IM port
if (connect(soap_sock, (struct sockaddr *)&soapAddr, sizeof(soapAddr)) <0 )
{
printf("connect error\n");
return -2;
}
else
{
printf("connect ok\n");
}
//创建接收线程
int res;
pthread_t sock_thread;
res&#61;pthread_create(&sock_thread, NULL, sock_recv, NULL);
线程内循环recv
//发送数据
send(fd, buffer, left_length, 0);
这些代码&#xff0c;在Linux&#xff0c;Windows的VC&#43;&#43;都正常运行(VC使用pthread也有可用的开源库)。移到iPhone上同样可以运行&#xff0c;所以&#xff0c;也就不必用iPhone SDK封装的NSStream,NFSocket等类库了。
当然&#xff0c;如果程序只在Mac环境下运行&#xff0c;暂时没有其他平台的使用&#xff0c;那还是用SDK最安全。
虽然号称是iPhone开发&#xff0c;但实际上只做了一个简单的界面&#xff0c;只用了短短几天时间就把Linux上的sip和IM(没用到任何臃肿的开源库&#xff0c;自己用C语言实现的最常用功能的协议栈)等程序移植到iPhone上&#xff0c;做成了一个简单的voip软电话(语音视频的播放肯定是有SDK的&#xff0c;但网络传输&#xff0c;封包组包完全不用重写&#xff0c;直接搬过来)。
所以&#xff0c;iPhone开发&#xff0c;实际上就是c语言调用iPhone sdk开发。如果C语言掌握熟练&#xff0c;对Linux或FreeBSD系统也熟悉&#xff0c;学起来也很快。
三 注意点
1 iPhone 4 SDK和Xcode环境有些变化&#xff0c;网上很多教程(很多网站互相抄&#xff0c;内容严重雷同&#xff0c;错误也多。建议直接看Apple文档)有些部分已经不能用&#xff0c;比如outlet和action的添加。
2 写网络程序时注意网络字节序&#xff0c;ntohl, htonl等转换是必须的。
3 涉及到字符串建议都采用unicode。
4 资源有限&#xff0c;内存需要节省使用&#xff0c;栈空间更要注意。还好是用C开发&#xff0c;自己可以控制。如果是JAVA&#xff0c;不深入研究的话&#xff0c;真不知道数据和堆栈怎么使用的&#xff0c;当然程序员也不需要关心&#xff0c;大不了直接让厂家多放点内存就行了。
5 虚拟机开发不太方便&#xff0c;如果准备长期做iPhone项目&#xff0c;建议采用iMac一体机做开发&#xff0c;mac笔记本屏幕太小&#xff0c;iMac可以22寸的&#xff0c;而且是4&#xff1a;3。(顺便严重鄙视一下宽屏显示器&#xff0c;本质就是面板缩水再骗用户)。
-