Xcode常用快捷键,网上找的总结一下,特别是格式化代码
隐藏xcode command+h
退出xcode command+q
关闭窗口 command+w
关闭所有窗口 command+option+w
关闭当前项目 command+control+w
关闭当前文件 command+shift+w
保存文件 command+s
保存所有文件 command+option+s
还原到保存时状态 command+u
项目中查找 command+shift+F
查找下一个 command+g
查找上一个 command+shift+g
浏览源文件 command+Double Click
打开头文件 command+shift+d
切换头/源文件 command+option+上箭头
撤销 command+z
重复 command+shift+z
剪切 command+x
复制 command+c
粘贴 command+v
粘贴并匹配格式 command+option+shift+v
全选 command+a
注释 command+/
文件首行 command+上箭头
文件末 command+下箭头
行首 command+左箭头
行末 command+右箭头
上一单词 option+左箭头
下一单词 option+右箭头
上一拆分单词 control+左箭头
下一拆分单词 control+右箭头
Tab :接受代码提示
Esc :显示代码提示菜单
下个Build警告或错误 command+=
前个Build警告或错误 command+shift+=
以调试方式运行程序 command+y
继续(在调试中)command+option+p
编译运行 command+r
Xcode 代码格式化/自动排版:
Xcode 版本:4.2和4.2之前的版本
选中需要格式化代码 -> Edit -> Format ->Re-Indent
Xcode 版本:4.2之后的版本
选中需要格式化代码 -> Editor -> Structure ->Re-Indent 或者
选中需要格式化代码 -> 右击 ->选中 Structure ->Re-Indent
当今移动开发炙手可热,以iPhone、Android、WP和Symbian、Bada等几大系统瓜分天下。
而相关的开发语言成为进入移动圣殿的钥匙,它们是:Objective-C、Java、C#和C++。
先来看看7月份的编程语言排名:
在来看看8月份的排名:
大家看到了,排在前五名的是C、Java、Objective-C、C++和C#。经常关注语言排名的童鞋应该惊诧的发现,
Objective-C在7月份竟然超过了C++位居前三甲了。是的,这是历史上的第一次。TIOBE编程语言排名依据世界范围内
软件工程师、课程和厂商的数量,通过计算得来。这足以反映了语言的流行程度。说起这四国语言,不得不说一下排在
第一位的C语言,原因大家应该是心知肚明,C是四国语言的始祖。这么说应该是不为过的。
C语言
C语言与Java的排名之争持续了数年,2012年C语言已经成为霸主几个月之久了。足以看见C语言是深受广大程序员喜爱的一门语言。
说起C语言的来历,其实也是历史的必然,是水到渠成的。它并不是突然降临的。
20世纪60年代,一个划时代的ALGOL语言问世。说它是划时代,是因为它是第一个结构化程序设计语言,也被称作A语言。
1963年,剑桥大学的科学家通过A语言发展出CPL语言。
1967年,剑桥大学的Martin Richards将CPL简化,成为BCPL语言。
1970年,贝尔实验室的Ken Thompson对BCPL进行了修改,产生了B语言。而第一版的UNIX系统就是用B语言编写。
1972年,贝尔实验室的Dennis Ritchie在B语言的基础上做了进一步的改进和发展,设计出了一门新语言,这就是C。
1978年,贝尔实验室正式推出了C语言。而Dennis Ritchie和Brian Kernighan合著了著名的《The C Programming Language》,
史称"K & R C",K 和 R标准的C语言。
1989年,C语言被ANSI标准化。这就是ANSI C。
2000年,ANSI C 确立后,之后是没有多少改变的。直到2000年2月,ANSI采用了ISO的C99标准。
2011年,新的ISO标准发表,这就是C11.
从C语言发展的世界表可以看出,C语言一经推出、确立后,改变是很少的。这样就出现了一个现象,C语言的程序员凭着积累,慢慢的终成大师。
C语言的繁荣,对软件业界影响深远。很多程序语言都是从C语言发展而来的,让我们先来看看两个直系亲属:C++和Objective-C。
C++
1979年,贝尔实验室的Bjarne Stroustrup对C语言进行改进和扩充,为了满足程序的复杂性需要和便于大型软件开发的特点。此时为“C with classes”(带类的C语言)。
1983年,“C with classes”改名为C++,并引入了新特性。
1985年,发布第一版《C++编程设计语言》。
1989年,发布Release2.0.同时引入了一些新特性。
与C语言一样,一个语言的标准化进程是非常重要的,这样杜绝了方言的产生,对语言的发扬光大起到了重要作用。
下面列出几个几个标准化:
1998年,对应C++98。
2003年,C++03。
2007年,C++TR1。
2011年,C++11.
C++包含了C的全部特征、属性和优点。在业界影响至深。在移动领域,Symbian和Bada的开发语言都采用了C++,这种Native语言运行的速度是非常快的,较之Java和C#有着运行速度的优势。虽然今天的手机配置越来快高,速度越来越快,但这样还是弥补不了Java和C#的速度之痛,在游戏领域,这点是令人诟病的。另一方面,C++的开发速度就并不能和运行速度相比了。C++,在很多人眼中是很难的,尤其在界面方面。而Bada系统提供的UI库是非常容易使用的,而Symbian后来的版本都加入了Qt库的支持,这点相信大家都知道,Qt库就是做图形界面出名的,在业界如雷贯耳。这两方面都弥补了C++在手机领域开发速度的不足。相信大家用上之后都会觉得不错。
Objevtive-C
这门语言是很传奇的,就像已故的乔帮主一样。从我个人的理解上,Objective-C是跟乔帮主分不开的,虽然它并不是乔帮主发明的语言。
1980年代初,这个时间段与C++相仿。Brad Cox发明了Objective-C。
1985年,Steve Jobs(被我们俗称为乔帮主)被自己创立的Apple公司“开除”(这个词不恰当,但也描述了事实),成立NeXT公司。
1986年,发布《Object-oriented Programming, An Evolutionary Approach》作为Objective-C最主要的语言描述。
1988年,NeXT 获得了Objective-C的授权,并开发出了Objective-C的语言库和NEXTSTEP开发环境。
1994年,NeXT和Sun联合发布了针对NEXTSTEP的标准典范,称为OPENSTEP。
1996年,Apple收购NeXT,NEXTSTEP/OPENSTEP环境成为Apple操作系统的基础,此开发环境的该版本被Apple称为Cocoa。
Objective-C被推出后数载,一直是默默无闻的。在C++的光芒下,人们并不知道有Objective-C这个C++的兄弟存在。Objective-C的流行程度是微乎其微的。甚至在语言排行榜上看不到踪影。看看这个对比图:
在2007年,Objective-C终于出现在人们的视野里,因为那一年iPhone发布了。短短的五年时间里,iPhone在移动市场上无坚不摧,乔帮主发起了一场革命。这场革命革掉了手机霸主Nokia的命,革掉了老牌劲旅Moto的命,而给Objective-C带来了新生。短短的五年时间,Objective-C从排名47的冷门语言变成了今天排名第三的炙手可热的大热门!
如果你是其他语言的行家,后来才去学习Objective-C,那么你会发现这门语言是很有意思的,很多地方都与你原来的习惯不同,因此被称作火星语言。
目前正在学习的是Objective-C 2.0.
Java
Java语言是由Sun公司设计的,其中代表人物是James Gosling。可以说,Java是由C++、Objective-C等语言发展而来的,是C的第二代传人。
1990年代初,Sun开发了Oak,目标定位于小型系统如家用电器等领域。这是Java的雏形。智能电器领域的发展没有预期的好,不过,Sun公司却赶上了互联网的大潮。
1995年,Sun看好互联网应用,将Oak改造适应互联网的Java并正式发布。Java坐上了互联网的快车,发展更是迅猛。可以说,Java的发展跟互联网是分不开的。此后Java语言的发展顺风顺水。
1996年,JDK1.0诞生。
1997年,JDK1.1发布。
1998年,J2EE发布。这是Java的企业平台版本。
1999年,Sun发布Java的三个版本,就是现在定型的J2SE(标准版)、J2EE(企业版)、J2ME(微型版)。
2000年,JDK1.3发布,随后不到一个月,JDK1.4发布。
2001年,Nokia宣布发布支持Java的手机。J2EE1.3发布。
2002年,J2SE1.4发布,Java的运算能力大幅度提升。
2004年,J2SE1.5发布,这是Java重要的里程碑,遂又将J2SE1.5称作J2SE 5.0。
2005年,Java SE 6公布,随之而来的是Java版本的更名,取消2字:J2SE 就是Java SE ,以此类推。
2006年,JRE6.0发布。
2009年,Sun被Oracle并购。
2011年,发布Java SE 7。
Note
JDK:是Java Development Kit的缩写,译为Java开发工具包。里面包含了各种类库和工具,以及另一个JRE。
JRE:Java Runtime Envirenment,Java运行时环境。是Java运行所必须的环境的集合。
最后要感慨一下,
Java的大热没有给Sun公司带来可观的经济利益;Sun公司的领导人手中握着Java这个强大的武器,并没有找到经济利润上的可持续发展道路,这点真是令人叹息。Sun被Oracle并购也两年多了,此间的传闻不断,其实这是Oracle在使用Java这个武器时发出的声响。以后Java在Oracle旗下如何发展,我们拭目以待。而在Android中,Java的使用上面,Google与Oracle也是摩擦不断。当时Android选用Java作为主要开发语言也是看到了Java的用户群,但现在Android的开发人员居世界之首,Google应该不会把Oracle放在心上的。开发应用程序,多数是用Java。而开发底层的,C还是少不了。还有很多人,要进行Java和C的混合开发。
C#
微软的C#与Java的语言相似度高达80%以上。这是前人帮我们总结的,所以,我们学习C#应该是很轻松的。
C#可以说是C的第三代传人了。
当Java借助互联网大潮大肆攻城掠寨之时,微软才发现自己晚了那么一步。但是出击还是及时的,也算是亡羊补牢吧。
2000年,微软发布C#语言的第一个预览版本。
2002年,伴随着.NET的正式推出,C#1.0正式版才与观众见面。
2005年,.NET 2.0 随着VS 2005的推出,C#2.0也正式与观众见面。
2007年,.NET 3.5 、VS 2008以及C# 3.0一起问世。
2010年,.NET 4 、VS 2010 及C# 4.0问世。
2012年,就在今年,.NET 4.5、VS 2012 和C# 4.5就要问世了。
C#是专门为.NET平台设计的,这种原生的基因,保证了C#以后的健康发展。C#是跑在.NET运行时中的,这种机制与Java和Java虚拟机是相同的。运行速度并是它的软肋,可是开发速度是它所擅长的。在WM时代,C#开发的应用程序要比C++开发程序快很多。但是需要运行速度的程序对此还是不满的,因为在Android中可以用Java+C/C++混合编程解决速度瓶颈,而WP7中只能用C#开发,不支持原生C++开发,这一点据说在WP8中改善了。
C#是易学易用的,初学者很容易上手。.NET库有着十分完备的文档(MSDN),学习曲线还是很平滑的。
总结
历史是向前发展的,知识是向后传承的。
下面的一幅图描述了这部分编程语言的继承关系:
参考文献
1、TIOBE编程语言排名网站
2、维基百科网站
3、钱能 《C++程序设计教程》
4、薛园园 《C语言开发手册》
最近项目原因,需要做出一个类似baidu搜索时下拉框的效果如图
于是乎想了多种办法,一种是利用AutoCompleteTextView+ListView方式,但是这种方式有一个缺点就是需要用帧布局,同时在利用AutoCompleteTextView.addTextChangedListener方法控制ListView的显示和消失时遇到一个很大的问题就是无法让其消失,即使你选中了一个条目,因为TextChanged的原因,ListView也是以一条你选中的条目为显示内容的形式在AutoCompleteTextView的下方,没有找到好的解决办法。
之所以想到以上这种办法的原因是在项目的一开始没有使用AutoCompleteTextView的原生态的下拉列表(有各种各样的不更新造成的),后来在使用AutoCompleteTextView+ListView无效的情况下只能回到AutoCompleteTextView的原生态的下拉列表的方法上。
http://stackoverflow.com/tags/autocompletetextview/hot这是stackoverflow上关于AutoCompleteTextView的FAQ,从中我们可以看到有多个关于从网上获取条目然后显示在AutoCompleteTextView的列表之上的问题和相应的回答。最终选中了http://stackoverflow.com/questions/8653260/autocomplete-in-android-not-working-with-dynamic-data这个问题当中名为iNan的解答,并对其进行了改进。
具体代码如下
WikiSuggestActivity
import org.apache.http.client.HttpClient; import org.apache.http.client.ResponseHandler; import org.apache.http.client.methods.HttpGet; import org.apache.http.impl.client.BasicResponseHandler; import org.apache.http.impl.client.DefaultHttpClient; import org.json.JSONArray; import android.app.Activity; import android.os.AsyncTask; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.AutoCompleteTextView; /** * @Title: WikiSuggestActivity.java * @Package com.yang.testautocompletetextview * @Description: 参考http://stackoverflow.com/questions/8653260/autocomplete-in-android-not-working-with-dynamic-data * @author Yang * @date 2012-8-12 下午2:59:54 * @version V1.0 */ public class WikiSuggestActivity extends Activity { public String data; public List<String> suggest; public AutoCompleteTextView autoComplete; public ArrayAdapter<String> aAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); suggest = new ArrayList<String>(); autoComplete = (AutoCompleteTextView) findViewById(R.id.autoCompleteTextView1); autoComplete.addTextChangedListener(new TextWatcher(){ public void afterTextChanged(Editable editable) { } public void beforeTextChanged(CharSequence s, int start, int count, int after) { } public void onTextChanged(CharSequence s, int start, int before, int count) { String newText = s.toString(); new getJson().execute(newText); } }); } class getJson extends AsyncTask<String,String,String>{ @Override protected void onPostExecute(String result) { super.onPostExecute(result); aAdapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.item,suggest); autoComplete.setAdapter(aAdapter); aAdapter.notifyDataSetChanged(); } @Override protected String doInBackground(String... key) { String newText = key[0]; newText = newText.trim(); newText = newText.replace(" ", "+"); try{ HttpClient hClient = new DefaultHttpClient(); HttpGet hGet = new HttpGet("http://en.wikipedia.org/w/api.php?action=opensearch&search="+newText+"&limit=8&namespace=0&format=json"); ResponseHandler<String> rHandler = new BasicResponseHandler(); data = hClient.execute(hGet,rHandler); suggest = new ArrayList<String>(); JSONArray jArray = new JSONArray(data); for(int i=0;i<jArray.getJSONArray(1).length();i++){ String SuggestKey = jArray.getJSONArray(1).getString(i); suggest.add(SuggestKey); } }catch(Exception e){ Log.w("Error", e.getMessage()); } return null; } } }activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" > <AutoCompleteTextView android:id="@+id/autoCompleteTextView1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:ems="10" /> <!-- android:ems 设置TextView的宽度为N个字符的宽度。这里测试为一个汉字字符宽度 --> </RelativeLayout>item.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/online_user_list_item_textview" > </TextView>效果图如下:
整个项目代码下载地址