首页
登录 | 注册

iPhone sdk4 编程

一 安装
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=pthread_create(&sock_thread, NULL, sock_recv, NULL);
 线程内循环recv
//发送数据
 send(fd, buffer, left_length, 0);

这些代码,在Linux,Windows的VC++都正常运行(VC使用pthread也有可用的开源库)。移到iPhone上同样可以运行,所以,也就不必用iPhone SDK封装的NSStream,NFSocket等类库了。

当然,如果程序只在Mac环境下运行,暂时没有其他平台的使用,那还是用SDK最安全。

虽然号称是iPhone开发,但实际上只做了一个简单的界面,只用了短短几天时间就把Linux上的sip和IM(没用到任何臃肿的开源库,自己用C语言实现的最常用功能的协议栈)等程序移植到iPhone上,做成了一个简单的voip软电话(语音视频的播放肯定是有SDK的,但网络传输,封包组包完全不用重写,直接搬过来)。
所以,iPhone开发,实际上就是c语言调用iPhone sdk开发。如果C语言掌握熟练,对Linux或FreeBSD系统也熟悉,学起来也很快。

三 注意点
1 iPhone 4 SDK和Xcode环境有些变化,网上很多教程(很多网站互相抄,内容严重雷同,错误也多。建议直接看Apple文档)有些部分已经不能用,比如outlet和action的添加。
2 写网络程序时注意网络字节序,ntohl, htonl等转换是必须的。
3 涉及到字符串建议都采用unicode。
4 资源有限,内存需要节省使用,栈空间更要注意。还好是用C开发,自己可以控制。如果是JAVA,不深入研究的话,真不知道数据和堆栈怎么使用的,当然程序员也不需要关心,大不了直接让厂家多放点内存就行了。
5 虚拟机开发不太方便,如果准备长期做iPhone项目,建议采用iMac一体机做开发,mac笔记本屏幕太小,iMac可以22寸的,而且是4:3。(顺便严重鄙视一下宽屏显示器,本质就是面板缩水再骗用户)。

相关文章

  • 更多关于Java高级编程内容链接:零基础学Java10系列三:Java高级编程--阿里云大学 多线程:  生产者和消费者指的是两个不同的线程类对象,两个进程公用一个公共的固定大小缓冲区.其中之一的生产者,用于将消息传入缓冲区,另外一个是消费 ...
  • PowerShell图形化编程2-快速入门
    Hello大家好,距离系列的上一篇文章,已经过去3个月了,真是白驹过隙啊-------- http://jiushu.blog.51cto.com/972756/1703221 我们今天的任务是做出来下面这个工具. 首先简单一下说一下这个工 ...
  • 面向过程与面向对象都是我们编程中,编写程序的一种思维方式. 面向过程的程序设计方式,是遇到一件事时,思考"我该怎么做",然后一步步实现的过程. 面向对象的程序设计方式,是遇到一件事时,思考"我该让谁来做&quo ...
  • Python语言起源于1989年,1991年正式公开发行,其简单性.面向对象.可扩展性.跨平台性等特征深受人们所喜爱.随着人工智能时代的到来,Python语言的发展可谓一日千里,已一跃成为人工智能时代的"第一语言".本认 ...
  •      面向对象编程(OPP:Object-oriented programming)基于三个基本的概念:数据抽象.继承和动态绑定.之前在学习"基于对象的编程"时已经了解到了数据封装和抽象的作用,今天学习的这部分主要来 ...
  • (一)Linux网络编程--网络知识介绍 Linux网络编程--网络知识介绍 客户端和服务端          网络程序和普通的程序有一个最大的区别是网络程序是由两个部分组成的--客户端和服务器端.  客户端         在网络程序中, ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号