command + option + shift +t : 在Groups&Files里定位到当前编辑的文件 主要快捷操作 1. esc 自动完成, 作用和VS中的ctrl+j类似,像 Eclipse 的 alt+/ control + , 与上面相同的功能 2. command + / 注释代码和反注释,用 //,相当于 Eclipse 的 ctrl+/ 3. command + option + 上箭头 快速在头文件(.h)和实现文件(.m)之间切换 4. command + b 编译程序,不运行 5. command + return 编译并运行程序 6. command + shift + b 打开编译结果窗口,显示编译详细信息 7. command + option + 双击 跳转到帮助文档 8. option + 双击 弹出层中显示帮助信息 9. command + shift + e 最大化编辑框 10. command + shift + r 打开控制台窗口 control + option + command + r : 清理控制台 11. control + command + \ 开启断点的 debug 模式 12. tab 接受当前的自动完成 13. 双击中括号或者大括号,可以选择相应的封闭语句块 14. command - shift - d: 快速打开文件 15. control - 2: 快速浏览当前文件成员,相当于 Eclipse 中的 ctrl+shift+o 16. option-command-left/right: 前一个/后一个编辑位置, 相当于 Eclipse 的 Alt+方向键 17. command+双击 进到源码中,相当于 Eclipse 的 Ctrl + 单击 18. command+shift+/ 打开 Search 窗口 19. option + command + y : 进行调试,并启用断点功能 command + shift + y: 打开调试窗口 20. shift + command + i 调试时 Step Into 21. shift + command + o 调试时 Step Over 22. shift + command + t 调试时 Step Out 23. option + command + p : debug断点时continue 24. command+ 左/右方向键 跳到行首/行尾 25. option + 左/右方向键 向前/后跳一个单词 26. option + delete 向前删除一个单词 27. fn + option + delete 向后删除一个单词 28. command + delete 删除当前行中光标前所有字符 29. fn + command + delete 删除当前行中光标后所有字符 30. command + \ : 当前行设置/取消断点 31. option + command + \ : 当前行启用/禁用断点,蓝色或浅蓝色 32. control + command + \ 激活或禁用所有的断点 下面几个暂作收藏 control + / : 切换到下一个占位符(自动完成的时候) control + . : 下一个自动完成提示 command + e : 使用当前选中内容查找 command + g : 在当前文件中查找下一个 command- + shift + f : 在项目中查找 command + option + shift +t : 在Groups&Files里定位到当前编辑的文件 . control+ a : 光标跳转到行首 . control +e : 光标跳转到行尾 . command+ ~ : 切换不同工程窗口 . command+ g : 向下查找 . command+shift+g : 向上查找
CoreFoundation里面的CFStringRef和NSString*是可以直接转换的,两种也都有一个相似的用来直接赋常量的操作。
例如:
CFStringRef a = CFSTR("a");
NSString *b = @"b";
CFSTR是一个宏,这个宏的定义可能是CFStringMakeConstantString,也可能__builtin___CFStringMakeConstantString。如果是CFStringMakeConstantString,看看CFStringMakeConstantString的实现就会明白,CFSTR("a")是存放在一个全局字典里面的,下次用到CFSTR("a")的时候先查字典里面有没有,如果有就是用存在的,如果没有则分配一个,并且放到字典里面。
所以这里有两个需要注意的,
一:CFSTR分配出来的字符串对象是不能自己释放的,如果你释放了下次在使用就会使用到一个野对象;
二:多线程使用可能会出问题,因为全局的字典是没有锁的。
而NSString的@有些不一样,应该和__builtin___CFStringMakeConstantString有些类似,允许你多线程使用,同样也不需要你自己去release,可以理解为b是一个autorelease的对象,系统会自己自动收回b。如果想长时间持有b那就retain,但不要忘了release。
通过添加一个id为android:empty的TextView,当ListView里面没有data的时候,就会显示TextView的内容。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<ListView android:id="@id/android:list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"/>
<TextView android:id="@id/android:empty"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="对不起,没有数据显示"/>
</LinearLayout>
需要注意的是,ListView的id,使用的是"@id/android:list",即系统默认的id,而紧接其后的TextView,使用的id也是系统默认的,即"@id/android:empty"。