口语发音教练app这一个app ios版本,注册完了怎么也登录不上去,真是烦

主题 : 我有个app分别开发了ipad和iphone版本,但上传完第一个后,发现上传第二个提示我不能用同一个app名字?
级别: 侠客
UID: 12392
可可豆: 652 CB
威望: 650 点
在线时间: 276(时)
发自: Web Page
来源于&&分类
我有个app分别开发了ipad和iphone版本,但上传完第一个后,发现上传第二个提示我不能用同一个app名字?&&&
我自己开发的app,分别开发了iPhone和iPad的,但为何上传最后一个itunes connect报告我不能上传同一个名字的app,那网易的网易云阅读是怎么做到的呢?网易的在iPhone和iPad都是同一个名字,但他们的确是两个App来的,不是universal,我看到appId得到这结论。
级别: 精灵王
UID: 113399
发帖: 3616
可可豆: 5689 CB
威望: 6206 点
在线时间: 2578(时)
发自: Web Page
Re:我有个app分别开发了ipad和iphone版本,但上传完第一个后,发现上传第二个提示我不能用同一个app名字 ..
你可以加个HD~~我刚刚搜索了下 看见网易云阅读的2个app的名称是不一样的 pad版本最后加了一站阅读
级别: 侠客
UID: 12392
可可豆: 652 CB
威望: 650 点
在线时间: 276(时)
发自: Web Page
回 1楼(sandpiper) 的帖子
是一样得,你在你iPad和iPhone上看下吧,不要在PC的iTunes客户端看
级别: 精灵王
UID: 40471
可可豆: 3624 CB
威望: 3605 点
在线时间: 823(时)
发自: Web Page
Re:我有个app分别开发了ipad和iphone版本,但上传完第一个后,发现上传第二个提示我不能用同一个app名字 ..
那你就在编译配置中更改部署平台吧,然后在代码中if ipad else iphone很麻烦的哦这样就是一套代码,一个App,适用于两个平台,
图片:屏幕快照
下午3.23.59.png
级别: 新手上路
可可豆: 5 CB
威望: 5 点
在线时间: 218(时)
发自: Web Page
Re:我有个app分别开发了ipad和iphone版本,但上传完第一个后,发现上传第二个提示我不能用同一个app名字 ..
楼主这两套程序是不是分享,推送和支付都要重新去申请应用啊
级别: 侠客
UID: 99841
可可豆: 929 CB
威望: 684 点
在线时间: 443(时)
发自: Web Page
Re:我有个app分别开发了ipad和iphone版本,但上传完第一个后,发现上传第二个提示我不能用同一个app名字 ..
app store上填写的名字不能一样&&但是app 显示的名字可以一样
生于忧患,老于淡泊;病于痴迷,死于安乐。
级别: 侠客
UID: 453383
可可豆: 237 CB
威望: 230 点
在线时间: 504(时)
发自: Web Page
Re:我有个app分别开发了ipad和iphone版本,但上传完第一个后,发现上传第二个提示我不能用同一个app名字 ..
所以如果开发ipad的话 最好和iphone分开开发 做两个项目? 然后分开上架?
关注本帖(如果有新回复会站内信通知您)
3*3+1 正确答案:10
发帖、回帖都会得到可观的积分奖励。
按"Ctrl+Enter"直接提交
关注CocoaChina
关注微信 每日推荐
扫一扫 浏览移动版扫一扫下载到手机
72MB/ 阅读学习 /9.4
6MB/ 阅读学习 /10
32MB/ 阅读学习 /9.5
31MB/ 阅读学习 /9.7
下载总览软件特权软件截图(4)视频演示猜你喜欢下载地址相关文章(17)用户评论
发音教练ios版:是一款相当不错的美语发音学习软件,堪称你手机上的美语专家哦。这里有外教真人录音,硅谷最新语音测评技术,智能语音打分,红绿标示发音正确与否,帮你高效精准地改善你的发音,还在等什么?快随网侠小编体验吧~
口语发音教练手机版app功能特色: 1、音标小白?没问题! 真人外教嘴型示范,中教细心讲解,让你洋味儿十足; 2、读不准?没问题! 跟读单词,系统及时反馈,边练边测,成长看得见; 3、发音不够洋气?没问题! 外教真人录音,硅谷最新语音测评技术,智能语音打分,红绿标示发音正确与否; 4、没有实战语境?没问题! 精选跟发音匹配的地道对话,让你在练习发音的同时搞定对话,提高学习。
编辑点评: 课程训练都很好,很适合练出好口语哦~ 更多口语软件内容,请进入专题:
活动内容:
截止时间:
领取方式:
活动条件:
口语发音教练ios手机版app
下载帮助网侠手机站软件均来自互联网, 如有侵犯您的版权, 请点击网站底部在线QQ进行联系。
1.网侠手机站所有软件和游戏都经过严格安装检测,保证不会有任何病毒木马等信息,请大家放心使用;
2.大家在安装软件的时候注意每个步骤,注意包含安装插件信息,推荐使用下载本站软件以获取最佳的下载速度。
3.如果您觉得网侠还不错, 以便下一次的访问.
4.网侠QQ群:应用软件交流群: 手机游戏交流:(满),加入二群:外行人如何在一个月时间内成为可以开发 App. 的独立制作人?
有一个绝妙的点子,但是不会开发APP。怎么在一个月时间内,从没学过任何编程语言的小白,成为一个可以开发APP的独立制作人?能够独立开发诸如ins这样的APP。好吧,那换个话题,楼主是外行人,怎么从菜鸟开始学编程,包括电脑和APP的?如果有个清晰的线路图,应该能少走不少浪费时间的弯路。15-03-06添加:感谢大家的指导,只是有几位前辈是不是没看仔细我后来的意思。之前我是想一个月之内学会的,因为不太了解编程这个学科。后来发现不可能后就请教菜鸟怎么从零开始学习。所以我的意思是“非科班出身的菜鸟怎样从零开始学习编程”,而不是“菜鸟怎么用一个月学成编程”。我不急着学成也确实智商平平,但自觉毅力尚可,之前用三年刷过了注会所以对学习编程有一点小信心,虽然知道两者难度不可同日而语。非常谢谢诸位啊。@迷你悟空, 哈哈哈,谢谢大哥,肚子笑疼了,一语道出忽悠的重要性。另:妈蛋怎么知乎的戾气和虎扑一样重啊。15-03-07添加:准备报个培训班,北大青鸟是否可行?
多图,注意流量.--------------------------------买几本好书,坐电脑前不停的写,废寝忘食的写,编程是世界上最容易的事,你还不用碰底层,先学学基本流程控制和调用API,然后理解下分层思想,这就能写脚本了,然后有兴趣有时间就研究底层,没兴趣就弄好一门语言,专心写脚本开发好app,难度方面你可以放心,是个人就能学会,学不会是不可能的。你要用java就研究好面向对象,一个月有点短但要是全力投入也不是不可能。你知道自己学,这可比那些就差一个程序员的强太多了。祝你成功,有问题可以私信我。---------------------------------------------------------------今天是第1天.书买到了吗?开发环境装好了吗?大体理解接下来29天要学习的内容了吗?还有信心和意志力坚持下去吗?如果决定搞安卓开发,应该学习java.如果决定搞iOS开发,应该学习Obj-C.这两门语言是面向对象的语言.它们将程序看成一个个"对象"的互相作用,对象有自己的特征和工作方法.一个App有视图,控制代码和模块三个部分.这被称为MVC模型.一个成熟的类似ins的App的开发,要实现移动终端上的程序(Client)和专用的服务器上的程序(Server).Client 和 Server通过IP协议上层的传输层协议(TCP或UDP)通信.接下来29天,大体要学习的部分就是这些:1.程序开发基础;2.MVC模型;3.网络编程相关知识.如果想继续学习,请私信我或留言.Hope you will carry on your career.The end of this section.------------------------------------------------------------------------第1.5天 说明下情况,以免新手被坑鉴于下面有知友说想看后续,于是决定更新.不过更新前必须交个实底,本人学生一名,之前只搞过MFC(可以理解成Windows窗体程序开发的一种方法),会数据库操作和网络编程,上过计算机网络,自学过操作系统和数据结构.可以称得上熟练掌握的编程语言只有c++.安卓和iOS开发都看过书,但掌握的不是很全面,实际经验也很匮乏.但这些开发的本质,个人看来是一样的.并不会因为语言特性的些许不同和实际操作的一点区别而影响本质.因此希望通过更新这个答案也能巩固自己的学习.(说通俗点就是我是个大菜鸡,非要装成高手写了这么个东西...)-------------------------------------------------------------------------今天是第2天.规定一下格式:斜体字是非必须看的,新手可以不看,粗体下划线是必须掌握的概念.程序开发语言主要分两种:0.面向过程式.(现在多数已经成为面向对象式的一部分,如C语言,在App开发中已经不常用)1.面向对象式.(Java和Obj-C,C++都是面向对象的编程语言,这类型的语言在实际应用中最重要,必须学习掌握)2.函数式.(阳春白雪,相对业务应用少一些,和App开发关系不大.如果在以后希望深入学习算法等,可以考虑学习一门)App开发的核心是程序的书写.因此今天讲面向对象编程思路.(注意,是"思路".具体的语法不会涉及太多)面向对象的编程将"对象"(Object,物体)视为核心,对象的"动作"称为方法,对象的属性(特性)称为成员变量.如果用面向过程的视角来看,成员变量是特殊的变量.方法是特殊的函数.可执行程序加载入计算机内存后摆放在三个地方:代码段(用于保存函数中的命令),数据段(用于保存全局变量和常量),栈段(用于保存函数调用函数的关系,还有一些其他信息,如上下文切换,这里没必要不介绍).变量的本质是一块内存中的空间,能够记录一定形式的数据.函数的本质是很多条指令,能够被执行并读取,计算,判断,修改一些指定地址变量的值.对象是方法和成员变量的集合.类(class)是对象的集合.是不是很抽象?举个例子.人类是一个"类",某一个具体的人A是这个类的对象,A的体重是变量.人有一个方法叫做吃(记住,方法就是函数,函数就是指令的集合,吃是一个动作,也就是一堆指令),通过执行"吃"这个方法可以改变人的体重.如果还不明白(其实暂时不明白也正常),就拆解的更细致一些:类,就是某种对象的公共特征,比如人,是个人就一定有体重这个属性,因此体重是这个类的成员变量,这个类的每一个对象(具体的人),都有体重这个变量.吃,就是这种对象都可以有的动作,是个人就可以吃,通过这个动作能改变一定的变量(比如人的体重等).那么怎么用代码实现呢?(注意,不同语言的代码看起来不一样,但是实际本质是一样的.)下面有人喊要我讲Obj-C,那我就现学现卖了.定义一个类.@interface Human{}-void eat:(int)foodweightinKG;@end@implementation Human-void eat:(int)foodweightinKG{
weight=weight+0.15*foodweightinKG;}@end这就实现了吃一公斤胖0.15公斤的人这个"类".类,对象,函数,变量是以后开发的重要概念,必须熟练掌握.建议想学习的知友买本参考书,用于学习某门语言的语法.这个答案不可能特别具体的讲解每一个语法,但如果有资料辅助的话学习起来是不难的.如果从后面来看我的答案,建议看到这里的时候找一些学习资料,学习一下某门具体语言的语法.这里重要的是理解这个思路,就是通过控制"对象",修改对象的属性,调用对象的方法来控制程序的行为.The end of this section.---------------------------------------------------------------------今天是第3天.今天主要讲程序设计中的一些基本问题和概念.有些问题要强调一下:
0.本人菜,能搞明白的只有c++,java会的相对比oc好一些,oc非常生疏.但基本原理都一样.
1.看完这个基本上就有思路了,但还是要自己买书实践.篇幅所限不可能内容太完备.如果有具体问题还是要自己查找资料,结合实践解决.
2.这么多赞确实出乎我意料,我会尽力更新.有问题也可以在下面提问,如果能解答的话我会尽力解答.-----------------------今天想告诉大家一些当初我在学MFC时候弄了很久才理解的很简单的道理.一.一个App,甚至一个窗口程序,绝大多数功能,都不是靠自己硬写出来的,而是调用已有的库函数,套用已有的类,加上中间业务逻辑的代码,和自己的算法实现(如果有).
就说最简单的Hello,world 这个东西如果要从一无所有的裸机(没有操作系统)上实现,必须得从头写向显示缓冲区中写数据的汇编指令(假设在8086上).
这个工作量显然不小.但我们不需要这样做.只需要调用系统自带的库函数就可以解决问题.
在Windows程序开发中,我们要画一个窗口,即使用调用WindowsAPI的方法,也要写几十行代码(注册窗口类,设置属性什么的),最后ShowWindow(),才能显示出来.这显然不符合面向对象的设计原则,而且增加了完全不必要的复杂程度.
因此,绝大多数普通开发者(非底层开发者)的日常工作是:寻找一些适当的库,调用这些库中已有的代码,来进行功能的实现.
因此后面讲的网络编程,不是叫你从头控制每个数据包里的每个字段填什么,而是只需采用适当的类(java有个Socket类,c++用socket函数从OS获取句柄),调用其中的函数(bind,listen,connect,accept,send,recv,close/sendto,recvfrom等等)就可以了.
这就是一个非常重要的理念:分层模型.将复杂的逻辑分成多层来实现,上层只和自己紧挨着的下层交互,保证了层与层之间一定的独立性,为复杂应用的开发提供了可能.情况1.你的软件比较复杂,应该用分层.
比如未来我们要开发一个小型社交软件(假设),那么首先我们要写一个服务端,服务端要记录用户的信息,对话的信息.可以创建一个用户类,用于记录用户的信息.再创建一个对话消息类,从高层上抽象用户与服务器发消息的过程,便于写客户端;再创建一个好友类,用于记录用户和朋友列表的对应关系(可以思考一下朋友列表怎么实现?).再创建一个记录类,用于帮助客户端实现聊天记录的实时查看,搜索,管理功能.
假设我们已经构造好了这些类.那么在新用户填写完用户名密码,点击注册按钮的时候,就应该创建一个对话消息类的实例(也就是这个类的对象),尝试向服务器发出一组消息,里面包含着新用户的用户名,密码(或者密码的Hash散列,但这个目前先不讲),一些填写的资料等等.
如果你在点击按钮后被调用的函数(称为"回调函数",Call back function)中,没有使用你已经创建好的类,而是从头写了一遍TCP报文内容填充代码,那么这显然不是对已有层模型的良好应用.正确的做法是用你已经有的那个高层类的各个函数实现报文的填充.
同理,如果你想创建一个客户到客户的好友关系,不应该自己从头改数据,而应该调用之前建立的好友关系类的成员函数.这样不容易出现问题(比如从头写的时候忘了考虑边界条件),也能大大节约开发,维护,升级(如果你把同样的代码拷贝了一份过去,那么你修改这段代码的功能的时候就必须把拷贝的那份也修改了!)的成本.
情况2.你的软件和操作系统内核交互,或者想要操纵硬件,那么必须调用系统的API(Application Programming Interface).这种情况下,你被迫接受了分层模型.
这样说可能显得比较抽象不好理解.那么举个具体的例子.
首先,如果你要判断2^17+1是不是素数,而且判断结束后的结果也不输出,就那么放着,那么当然可以不去碰系统的API.
但如果你想把结果输出到屏幕,或者通过网络传输回服务器,或者获取传感器的信息等,那么必须调用操作系统提供的函数.因为操作系统利用地址空间变换,让你碰不到真实内存空间.调用这些API时具体的参数很多,需要时可以上网查找相应的函数参数和返回值的约定.二.一个APP的开发分这几个部分,以安卓开发为例.这里假设大家都已经安装了Eclipse作为开发环境,并且都有Android开发包.如果没有可以去下载一下.这两个软件都是免费的.新建一个空的Android工程.大概长这样.大概长这样.认识一下图中的文件和目录.1.首先是src和下面的那个package(对就是那个图标像准星瞄准肿瘤一样的东西,好像看它裂成4块啊).src是源代码文件夹.解释一下,在java里一个package相当于一个"包"."包"里可以有一个或多个*.java的源代码文件.编程的工作就在这些.java文件里进行.2.然后是一些资源文件.在res目录下.比如这个AndroidManifest.xml,这里面记录了一些文档信息.比如软件的版本,包的关系之类的东西.又比如res\layout\main.xml(图中忘展开了,但是你自己建完工程点进去肯定是有的.),这个xml文档控制了你的App的一个界面,App有单界面和多界面的,咱们先死磕这一个界面.双击这个文件,看到的大概是这样的.是可视化的.所以可以做"所见即所得"的编辑,就像编辑文档一样简单(当然了如果要考虑兼容其实也不是那么简单的,但初学者不用考虑太多).是可视化的.所以可以做"所见即所得"的编辑,就像编辑文档一样简单(当然了如果要考虑兼容其实也不是那么简单的,但初学者不用考虑太多).当然了,如果你想求根问底那满足你.这个的确很容易把初学者吓回去,但是不用担心大部分时间你是不用碰这个的.而且这个xml文档就类似html文档一样.不信你打开一个网页,右键-&查看源代码看到的也是类似格式的东西.用尖括号组表示一个段落,段落之间嵌套或并列,是xml文档的特点.目前不必深入.然后就是一些其他的资源文件,比如drawable-hdpi里面有图片文件,用于显示.这个和网页制作是有共同点的.后面再介绍.3.可执行文件.这里有必要介绍一下计算机程序的运行过程.计算机程序的运行有两种形式:编译型和解释型.先说编译型.(如C系语言)首先,程序员采用各种高级语言(相对汇编码)编写程序.然后编译器把程序员书写的源代码分析,转换为汇编码,链接器链接多个文件,形成最终的可执行文件.最终发布的时候如果只发布可执行文件,那么用户是看不到高级语言源代码的.再说解释型.(如php,asp等网页脚本语言)首先,程序员书写脚本.然后解释器读取源代码,并动态的分配空间给程序中的变量,判断程序的走向,执行相应的动作.如果要发布给用户(当然脚本一般不发布出去),用户是能看到源码的.而Java就很特殊了!!!Java编写的程序,首先经过初步的编译,生成了Java字节码.(一种比较底层的东西,但不能碰到具体硬件)然后把这个东西放到JVM上跑.因为JVM这个东西每个平台上都有,因此也就相对容易移植到不同平台上.这个JVM的全程是Java Virtual Machine,也就是一个虚拟机.所以性能相对就比较烂,不过现在大多数应用场合是不特别在乎运行性能的,反倒是开发速度和可移植性可维护性比较重要.这个JVM也可以理解成一个大型的解释器(...)因此Java算哪种不好说,两种特点它都有.然后呢,AndroidApp更特殊,在Java这么奇特的大背景下它也算特殊的.为什么呢?为了适配移动设备(低能耗等需求),出了一个东西,叫Dalvik Virtual Machine.这个东西的字节码和java字节码还不一样...所以为了编写一个AndroidApp,你的Java源码经历了这样一个流程:Java源码-&Java字节码-&Dalvik字节码-&.apk文件
(与资源等打包)说了这么多,那如何得到最终的apk文件呢?点击Eclipse上面那个绿色的箭头就可以了.The end of this section.------------------------------------------------------------------------------今天是第4天今天计划继续研究第一个AndroidApp,HelloWorld工程的结构,并添加一个按钮控件.今天将介绍回调函数的概念.如果可能我更一个iOS开发的,毕竟也不能太坑想学iOS的...但是各位小伙伴记住原理都是一样的,只是具体实施方法有那么一些区别而已.遇到点问题卡住了.这个答案更新可能比较慢....等我调一下好的,回来.首先,建立完工程之后,如果没有现成的Android设备(如本人手头的老机器好久没用了得找找),可以建立一个AndroidVirtualDevice.这个在下载开发环境的时候会有AVDManager,在那个里面建立就行.如果建立完之后start有问题,那么改环境变量.附一篇文章:(如侵犯作者著作权请通知,会删除)然后点击绿色按钮,会在刚才建的虚拟机中出现界面.就像这样.然后呢,工程里的那个R.java不要改,那个是自动生成的,用来配合你写的部分.然后呢,工程里的那个R.java不要改,那个是自动生成的,用来配合你写的部分.今天先把开发环境配置好.如果能顺利走下来建立工程打开AVD看到这个基本主要任务就算完成.有中间卡住的可以百度,百度不到可以下面留言问我.然后如果想在界面上加点东西应该怎么办呢?我试试改下main.xml.一会继续更新.好的,现在回来.这里你直接拷贝代码是不行的.要注意几点:1.MVC模型中,你创建的视图(在main.xml的可视化编辑界面中拖拽过来一个按钮)和Button对象MyButton1是没有直接关联的.要让他们有关联,必须绑定.这个动作在代码中的findViewById中实现.至于那个id参数填什么,可以看你的R.java(别改,千万别手贱),点击那个东西一个个展开,R.java-&R-&id,里面一定有你刚才在视图里创建的那个button的id.找到他就可以了.这个东西的实质是一个类似宏定义的整数,打开R.java,你会发现一堆public static final class,里面有一堆int型的变量,那个其实就是类似于宏定义的按钮的类似"句柄"的东西,用MFC的类比.只要知道这个整数唯一对应着视图域的那个控件就行了.然后下面的行为就是确定按钮的行为.这里通过setOnClickListener,实现了把自己的回调函数(onClick())绑定到按钮的被点击事件上.可以理解成一旦点击这个按钮,Android就会触发这个函数执行.接下来讲解下回调函数的概念.之前讲变量的时候我埋了一个伏笔,说所有变量都可以通过他们的地址来读写.好的,现在回到这个伏笔.可以认为setOnClickListener这个行为传入了一个对象地址,这个对象的地址由new OnClickListener得到,而里面的那个OnClick()函数认为是新创建的这个OnClickListener对象的一部分.这个行为就类似于C++当中传函数指针.如果能理解最好,不能理解就记住这么写就能好使(是不是要求太低了...).The end of this section.咦,this怎么变色了.--------------------------------------------------------------------------------PS[0]:再强调一下,这个东西本人也是第一次写(指的是在这个开发环境下写,之前可视化的开发一直写windows窗口程序的).所以可能更新过程中突然卡住了.答主应该不会弃坑.PS[1]:看这架势有可能不到30天就更完了.如果这样的话很可能太快有人跟不上,有问题随时留言问就好.当然能搜索的请自觉先搜索,搜索不到解决方案再来问.PS[2]:答主好久以前安装的开发环境,如果要开发环境的话我去找找还能不能找到那个包了.这个安装的时候实在太麻烦了,因此学习Android开发我也是拖了很久.希望真的有兴趣开发App的朋友们不要仅仅因为安装过程中遇到一些困难就放弃.尤其是之前没有开发可视化程序经验的新手,如果能成功看到自己写的不是黑框框的东西,会很大程度上提高对编程的兴趣.(当然后来我又主动退回到黑框框里去了,这是后话.)--------------------------------------------------------------------------------第4.5天.咨询下大家意见.我打算接下来25天(可能用不了那么久就完结了)讲快点,做一个聊天工具的开发.这个怎么样?能接受不?还是先回顾下前面?iOS那边我一会看看,争取更一个,今天Android那边打算先停一下,因为前面侧重点太靠这边了,而且这推进速度也不算慢.但注意,原理是相通的,细节略有不同.毕竟前面一直都没怎么偏向iOS这边,不能太厚此薄彼.等下,答主换台mac回来接着更新.好的回来了.首先要搞iOS开发得有台MacOS设备,注意,没有Mac可以弄虚拟机,或者借一台,本人的mac是借的.虚拟机也完全一样,就是有点卡.还有必须说明的一点就是要开发iOS App的过程不需要开发者账号,但如果想发布在AppStore或者在自己没越狱的iOS设备上用,那必须得有开发者账号.付费之后就可以使用.价格记不清了,不低也不算高.如果不买开发者账号,就只能在模拟器上跑.另外就是软件方面.有了MacOS设备之后在AppStore下载安装一个XCode作为开发环境就可以了.------------------------------------------------------------------今天是第5天那么想学习iOS开发的朋友们请打开你的XCode.学习Android开发的朋友可以把之前做的HelloWorld工程自己做一做,加上一个按钮.你在虚拟机里运行完一遍之后可以到你的工程文件夹下找*.apk,然后放到你的真机里去跑跑看.File-&New-&Project-&iOS-&Application-&SingleViewApplication(暂时选这个).Device那里暂时选Universal就行.然后选择一个喜欢的位置放置工程文件.为了验证你之前的开发环境配置是否正确,点击上面的三角形开始按钮,在模拟器(Simulator)中执行程序.(下面这三段的第一个版本有问题,已经更正.)应该能看到一个模拟器的界面弹出来,当然了整个屏幕不一定放得下,可能需要往上拉右面的滚动条.什么都不用做,等待片刻之后会出来一个界面.你会惊奇的发现它居然和LaunchScreen.xib的视图是完全一样的(不一样就见鬼了),当然,不一会它就没了,取而代之的是一个空白界面.所以这里LaunchScreen.xib表征的就是启动时预先加载的一个Logo摆放的地方.好的,那么由之前几天提到的MVC模型,或者按我个人理解:App工程=源码+视图+资源文件+杂七杂八既然要系统的学习,那么就应该掌握下iOSApp工程的文件结构.等我出去看一下怎么截图.MacOS下我不会截图...好的学会了.图解如下:上方为图1上方为图2上方为图3上方为图3那么图1中的各个文件都有什么用处呢?首先看,有一堆.h和.m文件;*.h文件不必说,自然是C系语言都有的头文件.*.m文件是Obj-C的代码文件,就类似于*.cpp文件和*.h文件的关系.由于声明和实现分离是C系语言一贯的德行,而且前面也提到了Human类的接口声明在@interface后面,实现在@implementation后面,我们在这里也就不多说了.接下来说说具体每个文件的用途.AppDelegate.m,里面装了许多回调函数.读那个函数名字,就知道它是在什么时候被调用的.有准备进入后台,已经进入后台,准备回到前台,已经回到前台等事件的监听.监听到事件后会调用相应的回调函数.ViewController.m,里面装载了界面加载和内存不足时调用的回调函数.Main.storyboard,这个是工程的主视图文件.因为建立工程的时候我们选择的是SingleView型的,所以这里只有一个.你可以在这个界面上加入一些控件,比如按钮文本框之类的.当然了,这里的东西现在只能看,不能点,点了也没用,因为对应控件事件的处理函数没有写.那么在哪里写这些事件的处理函数呢?答案是在ViewController.h中.注意这里XCode提供了一种很方便的绑定控件实例与事件回调函数的方法:拖拽.首先打开ViewController.h,和Main.storyboard,要保证两者能同时被看到.然后右键点击你要设置事件的控件,点住相应控件右侧的圆点,向ViewController.h中拖动.然后会弹出一个对话框让你填写函数的名字.给函数起一个好记的,含义充分的名字,以确保自己不会弄混乱.然后在生成的函数体(注意在ViewController.m中!!!)中填写适当内容就可以了.注意,C系语言声明和实现的分离,决定了新的函数体在ViewController.m中.找到对应的函数,填写适当的内容即可.如图所示.如图所示.做到这里之后可以休息一下了.今天的内容大概就是这样.求赞求鱼丸甩起(误)The end of this section.----------------------------------------------------------------------------------------今天是第5.5天.看一下题目.要独立开发ins类的app是吧?答主没用过ins,所以可能做的和题主想要的有点出入.然后今天讲什么?咨询下大家意见.突然感觉没什么可讲的了.这哪用的上30天啊(笑)初步计划讲讲AndroidApp的结构,Activity之间的关系,App的状态.然后做个比之前Helloworld稍微大一点的东西.iOS那边先放一放,安装开发环境也挺折腾的,想学iOS的朋友先配置下开发环境把之前那个做出来吧.----------------------------------------------------------------------------------------今天是第6天.讲一下AndroidApp里面Activity是什么.Activity我个人的理解就是视图.可以认为App整体是一个网站,打开这个App之后看到的第一个视图是主页,页面之间可以来回跳转.因此,可以认为Activity是一张类似于网页的东西.仔细观察会发现Activity跟网页真的很相似.还记得那个main.xml吗,里面的布局和html布局的语法是很接近的,甚至有div.布局的时候要考虑这样几个问题:1.Android设备种类多,屏幕分辨率五花八门.网页一般兼容和的屏幕问题就不大了,而Android设备屏幕分辨率有:320X480460X640----------------------上面这两种不常见.------------480X800//这个还有一些480X854//小米1就是这个分辨率540X960//HTC以前的机器用640X960//坑爹3:2,好像魅族用过,相对少见0P,比较主流//1080P,高端机有采用的.据说还有2K的,这个就更好了.基本常见的列举出来了.但也有没考虑到的.兼容这么多就不错了.这些设备别说屏幕分辨率不一致了,就连屏幕长宽比都不能统一.坑爹的15:9,3:2,....(虽说苹果现在也好不到哪里去...)这就决定了在设计界面的时候,必须结合绝对布局和相对布局两种方式.所谓绝对布局,就是给出具体坐标,然后放置元素.所谓相对布局,就是给出元素间放置的关系,然后放置.具体在操作的时候可以通过放置linear layout的线来控制元素的位置.比如这样:这个不多说了,因为我也不是特别懂美术和界面.好的,那么可以发现Activity上控件的布局和网页很相似.那Activity的交互性是怎么实现的呢?前面我们已经看过了,是通过控件元素绑定相应的对象,进而在对象上调用回调函数实现的监听控件动作.那如何将我们的后台的动作(比如socket收到一份报文)反映到控件上呢?同样也是通过调用控件绑定对象的方法.比如,可以把文本框绑定到文本框对象上,然后在收到报文后调用文本框对象的setText方法设置文本框的新内容.推荐大家还是买一本讲App开发的书,可以对照着操作.这种后台动作反过来影响前台显示的应用有很多,最常见的就是收到socket数据之后要在前台做对应的显示,或者一个控件的动作影响其他的控件的行为.iOSapp的视图被称为storyboard.这个和上面的很相似,不赘述了.另外再强调一下,本人之前也没碰过App开发.上面这些都是第一次做,因此答案的确定度存疑,可能可供分享的价值也不是很大.那么接下来准备把重点放回到编程上来了,上面那些布局和控件,视图之类的东西我计划后面做示例的时候再探索.其实我现在有点找不到下面该说什么好了.如果有明确的学习需要的话就在下面评论区提出来吧.好的.那么先讲讲内存管理吧.(现阶段新手用不到)数据结构有两种.一种是大小和元素都确定的(一般都比较简单,像是一个单纯用数组实现的队列或者栈之类的),还有一种是动态分配并生成,用后销毁的,比如不定数目的元素连成链表,各种二叉树.这种变量的内存空间一般是临时分配的.因此就涉及到一个内存回收的问题.Java有自动内存管理,但是要注意要释放的数据不要连成引用环,否则无法释放内存,发生内存泄露,相当于这块内存就一直被霸占着,一时半会倒不会有什么问题(这点其实反倒最坑爹,如果上来就能看到错那这种问题就很好改,怕就怕这种不知道什么时候会发作的Bug),但如果产生内存泄露在某个循环里或者某个经常被调用的函数里,泄露的次数多了就会导致整个环境没有一点内存可分了,程序就崩溃了.因此要注意回收内存的问题.Obj C在这方面有自动释放池,记录剩余的引用次数.因此要注意作用域的问题,记得retain返回的局部对象,否则一不小心返回的东西会被莫名其妙的回收.然后讲一下基本的数据结构.这里就假设大家都有一定基础了.这个在你开发玩具App的时候用的不多,但是想专门做软件开发的话这方面了解越深入越好(其实是我实在找不到现阶段该讲啥了)首先是栈和队列.他们的区别很简单,栈是后入先出,队列是先入先出.用链表实现.然后是二叉树.二叉树维护着左右两个子树和一个上级节点.二叉树的作用是便于根据一个关键词的大小快速寻找目标元素是否在集合中.通过遍历一个二叉树,可以对集合中的所有已有元素进行某种操作.然后是红黑树.红黑树是特殊的二叉树,能够维持高操作性能,实现上稍微复杂一些.然后是图.图的作用主要是拟合现实中的多对多关系模型.一对多关系模型则可以考虑用树模拟,每一棵树都可以一一对应的化为一个二叉树.这些东西有兴趣的朋友可以学习下,用计算机系数据结构的教材就可以.现阶段可以不掌握这些而直接投入开发,但如果想深入学习,这是一个很重要的必须要掌握的东西.为什么说数据结构对后来的学习很重要?比如你的App要维护用户与用户之间的好友关系,那就必须得有相应的数据结构保存用户与用户之间的关联.好友关系的创建删除查询都要在一个比较快的时间内完成,否则服务器会背上不必要的压力.又比如你的软件要实现推荐给用户想看的内容,那这就涉及到用户之间的相似度的计算(UserCF)和内容内部的归档(ItemCF).后者可以尝试用机器学习的一些手段(logistic,SVM等等),前者可以用向量内积法计算,等等.在掌握基本的语法和操作方法,熟悉了常用的开发过程之后,就可以考虑往算法方面前进.而学习这些算法的基础就是熟练掌握理解常用的数据结构.今天好像扯了很多没用的....因为实在没什么思路了,明天讲网络编程吧.The end of this section.---------------------------------------------今天是第7天.一周过去了,时间过得很快啊.今天我们讲网络编程.这是应用软件开发的一个很重要的部分.要讲网络编程,首先要了解计算机网络模型.计算机网络服从于之前说过的分层概念.也就是说,网络的实现是分层的.OSI指导模型将网络分为7层.实际应用的是TCP/IP,它将网络分为5层.这5层分别是:应用层,传输层,网络层,数据链路层,物理层.物理层,顾名思义,是与底层物理链路相连的层,为数据链路层提供基本的报文传送服务.数据链路层为网络层提供服务,以此类推.由下至上的,最后自然是由传输层负责为我们的应用层(我们的App)提供服务.因此,我们主要的编程工作是针对于传输层与应用层的接口的.先看传输层.传输层的主要任务是:将用户要传送的数据整理成一定的格式,发给接收设备的传输层.接收设备的传输层收到后,将数据提交给自己的应用层.传输层还有一个任务,就是实现"复用".一台设备上通常有不止一个程序需要连接网络,但他们之间的通信必须是互不干扰的.这是依靠的是传输层的"端口"实现的.传输层有两个协议:TCP和UDP.他们的区别是:1.TCP是可靠的,UDP是不可靠的.2.TCP是以流的形式传送,而UDP是以一份报文的形式传送.TCP保证在连接没有断开的情况下正确且按顺序地传送每一份数据,将数据连成一个"流",保证数据在连接不断的情况下被可靠地传送.UDP将要发送的内容打包成一个报文(通常报文的长度要求小于1472个字节),整份报文会被作为一个整体传送.如果报文传送失败,接收方不会收到任何数据.如果传送成功,那么接收方会收到完整的数据.因此,UDP的传送虽然不可靠(不保证送到,错了也没有提示),但是如果收到了就一定是正确的,不会出现"收到内容错误的报文"的情况.初步熟悉了这两种传输层协议的特点之后,我们讲讲传输层的端口和网络层的IP地址,以及NAT(Network Address Translation,网络地址转换).为什么要讲网络层的东西?不是分层模型只需要操作和自己最近的一层吗?因为NAT的出现违背了分层模型,因此必须特殊考虑.首先介绍一下端口的概念.端口是为了区分同一台设备上的不同程序而设计的.比如HTTP协议默认绑定了服务器的80端口.这样当你发起针对80端口的连接请求的时候,服务器的服务端应用会加以处理(虽然你最后连接上的不是服务器的80端口,这个是后话不提).又比如你的ssh服务端口是22,这样当同一台服务器同时开启ssh和http服务时,两种服务因为监听的端口不同,所以请求处理不会混乱.那么NAT又是怎么产生的呢?路由器是最高工作在网络层的设备,它的作用是转发报文.家用路由器涉及到一个复用的问题,就是全球一共有差不多46亿IP地址,不可能每台设备都分配一个IP地址.因此必须设置好转发关系,让你分到的一个IP地址经过转换转换使得你的每一个设备上都有不同的IP地址.这是怎么做到的?IP地址的确只有46亿个,但是端口号的取值范围是0到65535,而一般的设备是不会跑那么多网络连接的.因此,通过"全球通行IP地址:对外端口"-&"本地专用IP地址:对内端口"的映射,是有可能实现IP地址资源的复用的.这里不详细讲NAT了,有兴趣的可以自己搜索.然后讲讲最常用的TCP的连接建立过程.TCP是有连接状态的.因此,比如我要连接到服务器的80端口,我就应该先绑定一个本地空闲的端口(客户端这一步可以在创建套接字的时候顺带着由操作系统自动完成),然后用这个套接字(socket)向服务器的80端口发起连接请求.服务器收到请求后,会分配一个自己的空闲端口(注意,这个才是最后和客户发生直接对话的端口,80端口只用于监听)与客户的这个socket建立连接.这样就发起了一次稳定的TCP连接.UDP没有连接状态.因此假设我们要通过UDP和服务器的81端口通信,只要创建一个套接字,然后想都不想直接给发送报文给81端口就行.一般UDP的应用不要求必须送达,因此也不必关心服务器是否收到了消息,继续做下面的事情就可以了.如果服务器成功收到了消息,并进行了处理,然后又回复了一封报文,你就可以选择接收这封报文,并查看里面的内容.当然了,UDP也没那么可怕,一般来说正确发送正确接收的概率远远大于出现故障的概率,除非网络连接的状态特别恶劣(干扰严重导致物理层误码被丢包),或者有人为错误(比如尝试发送过长的报文,导致网络层IP包被拆了,整个报文跟着完蛋了),否则正确收发的情况还是占大多数的.今天就先讲这么多.有兴趣继续的可以回去多看一看计算机网络体系结构的资料,还是很有趣的.明天讲具体的编程过程.The end of this section.-----------------------------------------------------十分抱歉昨天因为个人原因拖更了.今天一并补上.今天是第8,9天.因此今天的内容也要稍微长一些.准备一口气介绍完Java和OC的网络编程,并初步进入多线程模型的学习.首先,要知道Android和iOS都是基于Linux的.因此他们的底层服务是一样的.但对于具体的开发方式而言所应用的网络通信函数库又是不相同的.AndroidApp跑在JVM里.因此必须调用Java的包里面提供的函数.Obj-C向前兼容C.因此可以调用传统的Socket函数.也可以采用Core Foundation和NextStep的类.这种类(CFNetService,偏底层;NSNetService,偏高层)有高层的抽象,更方便人类理解和使用.接下来必须辨析两个通信中的概念.1.同步和异步:对文件,TCP连接等外部"设备",我们能进行的操作只有两种:读和写.获取数据是读,发送数据是写.同步操作,指的是等待操作完成,在此之前不做任何其他行为,直到操作完成才继续向下运行.异步操作,指的是给操作系统下达一个任务,让它安排合适的时机完成指定的读写操作,而程序自己继续向下运行.这项读写任务的完成情况由这样几种方式反馈:1.操作系统给进程发送信号2.操作系统在操作完成后调用事先约定的回调函数.2.阻塞和非阻塞,阻塞和非阻塞一般指读操作.写操作发生阻塞的情况在少量数据发送的应用中不多见."阻塞"指的是当操作无法完成时,在这里一直等待,直到操作完成."非阻塞"指的是当操作无法完成时,获取到这个不能立刻完成的信息,当场放弃等待,立即进行下面的工作.比如客户端收取服务器传来的数据的操作,如果利用阻塞操作实现,那么当接收缓冲区里没有数据的时候,客户端程序(这里认为是单线程的实现方式)将停在这里一直等着,不能响应任何动作.宏观表现就是卡死了.而如果采用非阻塞方式实现,当缓冲区中数据时,将立刻收到一个"WouldBlock"的消息,然后程序可以向下运行,处理这个问题.这时是可以避免应用活活卡死的.接下来可以介绍这几个类了.(本人对用底层Socket的操作比较熟悉,对这些类比较生疏,因此也包含着探索的过程)1.Java的包.(1).底层Socket.Socket skt= new Socket(远程地址,端口号);//这里创建的是TCP连接.OutputStream writestream=skt.getOutputStream();//获取一个写入流,向写入流中写入数据即可.InputStream readstream=skt.getInputStream();//获取一个读取流,从这个流中读取数据.writestream.write(流式内容的字节数组,起始位置,结束位置);readstream.read(接收缓冲区,起始位置,最大接收长度);//这个返回值是实际读入了多少字节.如果读入的字节数小于你想要的接收长度,可能需要过一会再次调用这个函数进行数据读取.skt.configureBlocking(true/false);//这个函数将设置当前socket工作在同步模式还是异步模式.然后可以用select方法进行多个socket的管理等.这里不多说了.(2).高层的连接.&1&数据库连接.常用的数据库会提供相应的jdbc,这样的话直接调用库中的函数就可以完成连接与登录的过程.查询与修改可以直接传SQL命令字符串完成.也没什么可说的.&2&HTTP.要开始一个HTTP连接,可以用底层的socket直接连接服务器的socket端口,并自己合成报文.但显然这样做没有利用好现有的库资源.Java的提供了一个URL类和一个HttpURLConnection类.通过这两个类可以方便的获取URL所指向的文件资源.创建一个这样的HTTP请求的过程如下:先创建一个String str,然后将这个str的内容填充为要连接的URL.然后创建一个URL myurl=new URL(str);这样就可以用这个myurl创建HTTP连接了.HttpURLConnection con=(HttpURLConnection)myurl.openConnection();然后可以从连接con中获取数据流了.BufferedReader reader=new BufferedReader(new InputStreamReader(con.getInputStream));接下来从reader中读取:String thisline=reader.readLine();//将一行内容读取到thisline字符串中.也可以将内容直接读取到byte数组中.不赘述了.2.Obj-C的常用库:&1&.底层连接:可以用linux的socket(个人比较熟悉这个);&2&.HTTP连接可以用NSNetwork.就像这样:NSNetwork同步HTTP操作:NSURLRequest *pReq=[NSURLRequest requestWithURL:[NSURLURLWithString:@"填入你要访问的URL"]];//注意,这里的@后面接字符串常量.NSURLResponse*NSError* err=NSData* data=[NSURLConnection sedSynchronousRequest:pReq returningResponse:&urlrep error:&err];//创建接收缓冲区,开始接收数据.if(!data)//如果接收失败{
{//如果产生错误
NSLog(@"错误为:[%@]",[err localizedDescription]);//打印错误到控制台.
}}异步操作可以自己创建一个类,然后调用Obj-C特性中的代理的方法实现每次收到数据呼叫自己的回调函数.记得每次在回调函数中检查错误就可以了.这里不赘述.最后介绍一下Linux的网络编程API(实际上这些API在windows下绝大多数也都能用.但Windows下的一些API到Linux下不能用了):之所以前面没有介绍如何绑定端口,如何实现监听连接请求,是因为一般没有在手机App上搭建服务端的,一般都是用Linux服务器搭建服务端,然后绑定端口,等待App作为客户端来连接.因此,这里重点介绍Linux服务端的搭建.首先,你最好有一个固定的公网IP地址.(192开头那个不好使.可以自己租服务器,没有固定IP也可以用一些高级技巧,比如动态DNS,但这种服务不稳定)然后绑定自己机器上的一个端口作为自己的服务用.注意不要和常用端口冲突(参考:如果你在同一台服务器上要架设网站,那么留出80端口,从剩余端口中选择;如果要通过ssh远程连接这台服务器,留出22端口).这里假设我们用公网IP的6602端口.如果服务器在自己家的路由内部,记得设置路由器端口映射,到你的服务器上监听的端口.接下来创建一个cpp文件.vim Server.cpp用a命令编辑文本.#include......//一堆头文件,到时候现用现查int main{
typedef int SOCKET;
SOCKET skt=socket(AF_INET,SOCKET_STREAM,0);//指定创建TCP套接字.
memset(&thelocaladdr,0,sizof(sockaddr_in));
thelocaladdr.sin_family=AF_INET;
thelocaladdr.sin_port=htons(6602);
thelocaladdr.sin_addr.s_addr=0;
bind(skt,(sockaddr*)&thelocaladdr,sizeof(sockaddr));//把套接字绑定到本地地址,相当于绑死你刚才那个端口和你创建的套接字skt.
listen(skt,5);//最多同时处理5个未响应的连接请求(这里实际是设置等待队列深度,深度太大也没用)
socket remoteskt=accept(skt,0,0);//等待客户端连接,新套接字是
int isParent=fork();//谁是0谁儿子(笑)
if(!isParent)
{//如果是子进程
//在这里处理连接请求,用recv收,用send发.连接结束后,回收垃圾,结束自己.
return 0;}必须得说明下,不是我不缩进,是知乎不支持,我打的空格全没了....好的,既然这里都用到fork函数了,那就说明已经是时候讲多进程/多线程了.不过,今天的内容应该已经够多了,可以慢慢消化一下.明天讲多进程/多线程.The end of this section.------------------------------------今天是第10,11天.(答主时间不多,有时候更新不及时,而且开学之后基本上不太可能实时更新了....见谅,但是内容上是不会少的.等我完全掌握之后会回来更正一遍,改正这个版本的错误并梳理思路.)今天讲讲多进程/多线程编程.首先辨析一下程序文件(可执行文件)/进程/线程的区别.可执行文件是一个静态的,二进制文件.它平时被保存到外存上.只有当可执行文件被执行的时候,才被操作系统读取其中的内容,并分块加载到主存储器.这个程序被执行后,会产生一个进程.如果这个进程fork()自身,或者再次执行这个程序,会产生第二个该程序的进程.如果这个进程创建子线程,那么会产生线程.(主要是windows下有这个概念,linux下的线程不太了解,一般都是用fork.)线程之间一般可以共享数据段,而进程不可以.下面详细讲一下linux的fork函数.fork的基本特征可以一句话概括:到这裂两半,谁零谁儿子.(...)换言之,就是程序运行到fork这里,操作系统(*nix内核)会给它再次分配一个数据段,并拷贝之前的内容.这样就可以再产生一个进程.这两个进程共享原来的代码,然后子进程的执行不是从原来程序的入口点(一般是main函数)开始的,而是从fork那句后面开始的.fork会提供一个返回值,用于返回是否是父进程.宏观上看,可以认为这两个进程是"同时"执行的.然而微观上的执行顺序并不确定,也无需关心.例如,当你的环境是单核CPU时,物理上是不可能做到同时执行多个程序的.但是可以通过几十毫秒就调度(切换)一次进程的方式,实现多个进程"人眼可见的"同时跑在操作系统上.在Linux上(别忘了Android跑在Linux上,iOS是基于UNIX的,而Linux是UNIX的派生)进程有优先级,nice值等属性,决定了每次调度器调度的时候,哪个进程被换入,换入后又执行多长时间.用户态开发者(比如我们这种App开发者)无需关心这些.好,理论部分到此结束(当然了要想深入了解原理这肯定是远远不够的,如果有兴趣可以读UnixV6在fork部分的源码,UnixV6源代码已经开源.)接下来介绍实际应用.不知大家是否比较过一个Windows窗口程序和初学编程的时候命令行程序的异同?相同点是:代码都运行在同一套体系(80x86机,有操作系统)上.不同点是:一般的命令行程序没有消息循环,除了等待用户输入和等待网络另一端发来数据以外,在自己被分配的执行事件中一直持有着CPU资源.而窗体程序有一个消息循环.大概的语句结构是这样的:CreateWindow(...(一堆参数懒得找了));//创建一个窗口ShowWindow();//显示之前的窗口,同样懒得找参数了.message M//创建消息结构while(GetMessage(&Mymsg,NULL,0,0))//进入消息循环.{//我也想缩进,知乎这编辑器不支持,大家体谅一下TranslateMessage(&Mymsg);//翻译消息.DispatchMessage(&Mymsg);//分发消息.}这里注意,在CreateWindow的时候你有机会创建一个自己的消息处理回调函数.当系统发来消息(鼠标,键盘等操作,网络编程中的异步消息模型中的系统消息,外部要求关闭等消息)的时候,通过这个回调函数可以加以处理.比如当获取到鼠标消息时:switch(uMsg){case WM_LBUTTONDOWN: //用户点击鼠标左键{///做点什么}}没有消息的时候,程序就"卡在"GetMessage()那里不能动弹.(但客观上说,是程序自己主动放弃了CPU的资源,并要求操作系统调度到下一个进程)但为什么我们能操作窗口,而不至于产生不响应的状况呢?因为每当我们对这个窗口进行一次操作,都将会产生一个发送给这个窗口的"消息",这时GetMessage获得了这个消息,因此程序继续运行,宏观上来看就是"好厉害,同时开这么多窗口居然不卡!".(......)--------------------AndroidApp中实现多线程--------------那么如何在AndroidApp中实现多进程/多线程呢?首先,多线程相对容易实现.因为AndroidApp运行在JVM中,这就决定了Java的一些类可以直接用.事实上,常用继承Thread类的方法创建新的线程.Thread是一个类,这个类中有一个run方法,还有一个start方法.因此,只要继承Thread类,重写其中的run方法,就可以创建自己的线程.这个线程的入口点是run函数.然后用这个自己创建的子类派生出对象,再调用它的start方法就可以了.两个线程会同时运行.注意,java有一些关键字(如synchronized)可以确保线程之间不会互相干扰(比如控制其他线程不读取一个线程正在写的数据,也就是控制"脏读(Dirty Read)"现象,等等.).一个线程如果暂时没事干,也可以调用sleep(毫秒数)暂时放弃CPU一段时间.但要注意,这个操作不保证在指定时间后一定能回到这个线程.也就是说sleep的实际含义是:在一定时间内,确定的放弃CPU使用权,即使在此之后不保证能及时回到这个线程中.当需要"至少等待这么多时间"时,适合用sleep.还是给个例程吧,免得太突兀.class MyBGThread1 extends Thread{
public void run()
//填写自己进程要做的事情.这里可以访问原来主线程中的变量.
}}.....//懒得写了public void main(){
MyBGThread1 thethread=new MyBGTread1;
thethread.start();}-------------------iOSApp中实现多线程/多进程----------首先肯定是fork了,用fork可以实现几乎所有多进程需求.fork之后的进程之间怎么通信?可以用UDP给自己的主进程发消息.活用网络编程解决本机需求.然后还可以利用NSThread类实现多线程.下面来介绍这种方法.假设你有一个类MyClass,里面有一个函数thisthreadmain(),你希望在生成新线程之后,新线程执行这个函数里面的命令.那就可以这样操作:@implementation MyClassvoid somefunction(){//...一些其他操作//调用这个somefunction的时候就会产生一个子线程,这个线程以自己的thisthreadmain为参数.[NSThread detachNewThreadSelector:@selector(thisthreadmain:) toTarget:self withObject:/*这里填上传入给thethreadmain函数的参数.*/];//创建并启动子线程.//一些其他操作.}void thisthreadmain:(id)Param{//子线程里的操作.}@end这样就完成了一个子线程的创建.下面讲一个相对底层一些的,pthread接口.这个接口更底层,因此例程用C实现.pthread产生的线程的生命周期是:step&1&创建线程结构step&2&启动线程step&3&销毁线程下面是一段例程:#import&pthread.h&//注意,用#import代替#include 可以避免头文件重复包含导致无法编译.void ChildThreadFunc(void* pParameters){//子线程要跑的函数}void MakepThread(){pthread_attr_t MyApthread_t MypthID;if(pthread_attr_init(&MyAttr))//初始化pthread_attr_t结构.{printf("Failed.\n");}if(pthread_create(&MypthID,&MyAttr,ChildThreadFunc,/*这里填要传入的参数*/)){//创建线程(注意我只是创建,没启动.)printf("Failed\n");}if(pthread_detach(MypthID)){//启动线程.printf("Failed\n");}if(pthread_attr_destroy(&MyAttr)){//销毁线程.printf("Failed");}end:return 0;}虽然goto一般不建议常用,但用于处理可能出现异常并且有资源回收需求的业务是非常合适的.那个printf也可以换成NSLog.今天讲的内容有点多,而且也比较抽象.如果可能的话自己动手试一试吧.过两天答主打算弄一个实例,直接把前面的知识点串联起来.小伙伴们求鱼丸甩起啊!(...)The end of this section.-------------------------------------------------某良心答主又来更新了(真不要脸啊....)今天是第12,13天(平时时间不多,我尽量弄,要开学上课了...)今天咱们做个多界面的东西试试.不好意思各位,这两天学校有些事情在忙,我有点调度不过来了。我尽快补上剩下的内容,希望大家谅解。然后呢,图和我下面讲的内容不在一台电脑上.所以下面讲的是没图的.回去我补上.现在用的电脑上没有开发环境.我尽可能先写出一些,回去继续更新.Android中创建多界面程序,需要用到一个叫intent的东西.intent,直译为动机.利用这个"动机",可以完成Activity的跳转和参数传递.这个"动机"还可以调用系统的一些应用,比如拨打电话,发送短信等等.简单地说,"动机"是一个对象,负责可视化对象之间的跳转.具体来说,可以完成同一个App内部Activity之间的跳转,不同App之间的跳转这两种.这里我们主要讲解同一个App内部Activity之间的跳转.同一个App内部可以创建多个Activity.可是我们新建的工程只有一个Activity.这时应该怎么办?//付费购买会员资格,享受更多Activity!(...)上面是玩笑.我们可以通过创建新的继承Activity的子类的方法创建第二个,乃至更多个Activity.但现在的主要问题是,如何设置这些Activity,使它们能够被使用?一个Activity,在程序上需要一个子类去继承Android的Activity类;界面上需要一个xml文件提供界面描述;Android工程总体上需要修改manifest.xml.因此,必须完成这样的几个过程:1.创建自己的第二个子类,继承Activity类(第一个是你创建工程的时候开发环境免费送的)2.创建自己的第二个.xml页面描述文件,用于构造界面.3.在manifest.xml中注册新的Activity.4.回到自己的新Activity子类,与新的xml描述文件绑定.这中间有些具体操作挺复杂的,我第一次弄也弄了好久.一会回去贴图,再详细补充,这样大家可以少走点弯路.iOS开发里面那个多界面很好做,随便画一个新界面(右下角那个),弄一个按钮在第一个界面.按住Control,然后拖动按钮到你要跳转的界面,选择覆盖就行了.跳回来也很简单.但暂时没弄明白怎么传参数.等一会回去研究一下.今天要9点左右才能开始继续更,请大家谅解.施工现场,带好安全帽.
我相信有人可以0基础一个月的时间学会IOS或者安卓APP开发,并且有可以使用的产出,可能糙一点。但是我不相信来这里问这种问题的人可以。
兄弟我被你这股热诚感染了,以你问的问题来看,已经基本排除你是天才的可能性,哥告诉你个办法,买本书,踏踏实实的,每天除了吃饭睡觉,就是学习,写代码,最后你自然就知道花了多少时间,有时间问捷径,不如多用些时间去做。祝福你早日成功,加油。
题主想要完成这个任务,需要一些条件啦:首先你网速够好,其次你英文够好。上外网不卡,英文听力不错。一个月不干别的事情差不多可以上手iOS App或者Html5 Web App开发。能做个作业,可以跟小白炫耀一下。需要的工具:互联网、翻墙软件、电脑一台(iOS 需要mac 虚拟机黑苹果都行)、谷歌、、w3cschool。时间分配:12天基础,18天实践。以六天为一周,那么你的一个月就有五个周,而不是四个。前两周搞定基础,后三周完成作业基础部分:第一周:在上搜索并学习 Foundations of Programming: Fundamentals,Foundations of Programming: Object-Oriented Design
看完这两个教程,算是入了个门,什么variable class function method 之类的就看懂了明白是怎么回事儿了。 同时以这六天的进度评估现在的接受能力,如果这六天觉得很轻松没问题,并可以写一些小的代码,可以挑战iOS的开发,如果这六天觉得比较吃力,而且第二个Object-Oriented Design中的概念很难理解,建议转向Html5 Mobile App开发。第二周:根据第一周的评估又分为两个方向方向A:iOS开发:学习语言和工具:xcode 以及 swift或者Object-C在上搜索并学习项目1[Objective-C Essential Training 或者 Swift Essential Training]项目2 [App Development Essential Training或者App Development with Swift Essential Training ]项目3[ iOS Game Development with Sprite Kit]语言的选择上看喜好,Object-C发展的比较完善,资料也很多,swift是新兴的,热门,但各种学习的资料的介绍中也有不少错误。任何不懂的地方请用谷歌进行英文搜索,比百度有效率太多。本周没有完成以上三个项目的学习,则任务失败。你要有兴趣可以继续看下去,但一个月之内的作业是肯定完不成了。方向B:Html5 Mobile App:学习HTML,CSS,Javascript项目1 w3cschool上学习HTML HTML5 CSS CSS3 项目2 上学习 JavaScript Essential Training 项目3 上学习 Building Android and iOS Apps with Dreamweaver CC and PhoneGap本周没有完成以上三个项目的学习,则任务失败。但比起方向A来说,这个方向还是相对好完成一些的。在基础部分的学习中,还有一个小技巧提升学习速度——将播放器的播放速度提高至1.1-1.2倍,长期这样可以节约很多时间。实战部分第三至五周做作业——遇到问题——解决问题——继续做作业。大概这三周的时间内会遇到各种各样的问题,但通过前两周的学习应该基本获得了解决问题的各种方法。关注遇到的问题,和如何解决这个问题。所有其他的复杂的概念请在解决了问题、完成任务之后再研究。 你可能会遇到如何在存储用户的资料,联网游戏或者应用还需要一个服务器,调用手机的摄像头、震动等功能、等等等等。先明确目的,然后通过搜索引擎(谷歌更为高效),论坛交流来尝试解决这些问题。以实现功能为主要目标,解决问题,并做好笔记,会让你快速的完成任务。你会遇到很多的库、框架、IDE、协议并且看到许多程序员为此争执。我的建议是跟这些保持一定的距离。在国内的论坛或者QQ群,总会有一些也是刚起步的朋友拿这些吓唬人。国外的社区环境还是相当不错的。对于有些不能给你提供任何帮助而对你横加指责,或是好心却把事情变的更加的复杂化的人,我建议感谢他们,但仍然按照自己的目标走。向着目标,别走弯路。
转一篇漫画给你吧。来自: - 希望对你有帮助不用谢。
最近总结了自己这一年做的工作,突然感觉这个问题其实有解。首先题主也明白,一个月无法出作品,但是一个月也许可以让你重新认识自己脑海中的点子,并规划出一个明确的完成思路。那么我们先具备这么几个条件:*较重度的app使用经验*英语听说读写能力中的读*较强的逻辑思维*强大地做下去的决心我觉得具备这上面三个条件就可以开始了。我一直非常和有天马行空想法的人交流,很多东西和潮流都是这样的人来带领的,你若真认为自己的想法很好,方案可行,就一定不要放弃和拖延,付出行动自然会有结果,不论好坏都是你的处女座。不要太过在意别人的看法。每个外行入手制作app时,都是从页面开始的,所以,你首先要能画出来你脑海中idea需要几个页面,功能如何分布在这些页面中,相互如何交互。所以我提及了“较重度的app使用经验”,有这个经验才能很快的把虚的想法变成实在的可看到的东西。当完成页面工作,如果完全没编程过,就该去看一下斯坦福大学ios开发课程,我当时就是听着那个课熟悉了ios框架知识,这段时间比较难克服的是很多生僻名词的理解。有难度的话就得买本中文的书籍来对比着学习,这个阶段是最难的,但做到后也是成就感最大的。接下来,就该去逛这么几个网站啦: 或者国内的 后者上手更容易,你可以搜索到类似能完成你页面那些功能的代码。照猫画虎,把代码片段粘贴到自己项目中。那么你看,你需要具备的条件,就剩下强大的做下去的决心了,因为到这里,你才开始把自己的想法搭积木一样的搭出来。这时也是考研自己能否坚持下去的关键,这时也许会有很多朋友在旅行,也许朋友圈中每天都有大家的聚餐,也有很多朋友跳槽高就,更有女神的各种搔首弄姿,建议在做工作时完全不碰社交网络。同时也要有“我要做出一个让大家都惊叹的app”的决心。上面说的太理论,那么实践才出真知,我的这一年其实总结了不少东西,希望你能受用。我记得我当时画草图时,就画过头了,太在意细节,没整体去感知产品的结构,一个页面要表达的中心思想不明确。这就体现了做产品的功力问题了,但不是说没功力就做不出,我建议期初页面一定要追求简单,功能就一个,目的就一个,不要堆砌,你看snapchat这样的产品,简单到想删掉,但你要知道,这么简单才是让大部分人一下子就会用的关键所在。页面越要表达的多,越不知所以然。草图画完后,我在实际编码时真的是删减了很多功能,而且过程很痛苦,那时才明白什么叫做丰富了容易,做简单难的道理。编码过程中,不要过多扣UI方面的东西,如果你总告诉自己UI能体现你产品的内涵,气质什么的,那说明你的创意想法也许真的不是很靠谱,不然为什么靠UI来衬托产品气质呢。再说一个不能跳过的东西:服务器端开发,建议使用云产品来快速搭建,比如leanCloud这类东西,能帮你节省太多时间。我走过很多弯路,其中就有自学了很多Server方面的知识,自己搭建mongoDB集群,甚至我都做了预备产品突发大流量的应对工具,最终结果就是这些工作太浪费时间了,真的要大流量来了,那时再想办法也来得及。综上所述,你花费最大时间会在编码和改bug上,其次是学习和模仿别人代码上。最后,不要给自己设限,不要总提自己优势和弱势,其实当你真的走到自己编码做自己想法的时候,你需要的只是强大的推动你完成的那股子劲儿。还是不得不说一下,找个伙伴一起吧,这样会更有信心,即使他帮你做的只有20%。
加特技,duang的一下。就好了。
睡觉,多做梦
1.沐浴更衣2.准备一张温暖的大床3.做梦
已有帐号?
无法登录?
社交帐号登录}

我要回帖

更多关于 口语发音教练app 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信