Obejctive-C 中定义可变参函数

Objective-C 中有许多不定参数函数,像 NSLog(format, arg1, arg2),还有字符串或数组在构造时所用的 [NSString stringWithFormat: format, arg1, arg2, arg3],它们的方法原型分别是:

FOUNDATION_EXPORT void NSLog(NSString *format, ...) NS_FORMAT_FUNCTION(1,2);
+ (id)stringWithFormat:(NSString *)format, ... NS_FORMAT_FUNCTION(1,2);

应该去掉后面的 NS_FORMAT_FUNCTION(1,2) 来看,否来会干扰到思维。我们现在的例子还不需要这么写,至于 NS_FORMAT_FUNCTION(1,2) 的功用为何,我有时间还得好生看下。OK, 看多了 Apple 的那些可变参函数,可能反而令你感到费解,还不如来试个实际的例子:

阅读全文 >>

Objective-C 里指针变量星号 * 你会放在哪个位置

话说在 Objective-C 里声明指针变量时,星号(*) 该放到哪个位置,是紧贴变量类型,紧贴变量名还是放它们之间两边用空格,或者全挤在一起?到底还是在思考 C/C++ 中指针变量的声明风格,因为 Objective-C 是 C 的超集。

纯粹讲 Objective-C 的代码风格,我觉得 Google 的 Google Objective-C Style Guide 非常有指导意义。转回来看 Objective-C 声明指针变量时什么风格好些,下面四种都符合语法:

。看显然,第四种风格是最不好看的,就像有人写 SQL 喜欢 “select*from table1" 一样 阅读全文 >>

Xcode 4 常用快捷键(和 Xcode 3 有些不一样了)

把 Xcode 由 3.2.5 升级到 Xcode 4.0.2 之后,满以为快捷键总该不会变化太大吧,没想又要经历一个快捷键的适应过程,发现有些在 Xcode 3.2.5 中的快捷键到了 4 之后不灵光了。所以把之前的 http://yanbin.blog/xcode-3-shortcuts 标题也由原来的标题“XCode 中我的常用快捷键” 改为“XCode 3 中我的常用快捷键”,还在使用 Xcode 3 的可以回去看下,我想也是该丢弃 Xcode 3 的时候了。

主菜单调整的大,Build, Run 都没啦,快捷键的变动自然就大。再由于 Interface Builder 已经内建到 Xcode 中了,所以先前的 command + 数字 显示出相应面板的快捷键被替代为 command + option + 数字 了,但也不是直接对应的。连 option + command + up 在 .h 和 .m 间切换的快感的体验不到了,有触摸板的朋友请用三个手指上下划动来切换,对于 iMac 或黑苹果就不爽了。

对于 Xcode 4 的快捷键直接上两张图吧,其实这两种图是一样的,只是背景色不一样,白底的可以打印出来贴在照壁上,每天可以审视。

阅读全文 >>

Xcode 4 的新特性介绍

今天由 Xcode 3.2.5 升级到了 Xcode 4.0.2,Xcode 4.0.2 居然也要付费了,4.99 美刀,系统要求 Mac OS X 10.6.6 以上。安装之后发现有很大的不同,最让人意外的是居然连一些快捷键也变了,像 command + option + up 都没法在 .h 和 .m 文件间切换了,Interface Builder 就面目全非了。不过还好,反正使用 Xcode 3.2.5 的时间也不长,才三个星期左右,放心的忘了旧版本吧,努力去适应。苹果的风格是不想让人回头的,基本上一旦升级到新的版本上来,以后都不会有机会需要使用旧的版本的,何不让自己也 keep updated 呢?

关于 Xcode 4.0. 2 的新性可以直接看官方的介绍:What's New in Xcode 4Developer Tools Features。别看标题是 What's New in Xcode 4,好像讲的是 Xcode 4 的新特性,但这个链接并未受限于 4 这个版本,保管 Xcode 5 出来后同样是前面的链接内容却是 Xcode 5 的新特性了。

这里把别人翻译的 What's New in Xcode 4 转载到这里来,稍事整理。请对我们的开发工具更多些了解吧,用处呢,会很明显的。 阅读全文 >>

读《Objective-C培训资料》的摘要

本文为阅读文档:Objective-C 培训资料 的一些摘要,在此记录,以备回顾。

#define nil NULL
bool型与c/c++是一样的,非0为 TRUE/YES, 0 为 FALSE/NO, 用 if(flag==YES) 就要注意了,此时 YES 就是 1,不过你直接用 if(flag) ..... 来判断就只要不是 0 就成立。

#import 和 c/C++ 的 include 一样也有 <> 和 "" 两种查找方式。但是它不怕重复引入。

NSLog() 会自动在输出后加 \n,相当于 System.out.println().

Objective-C 的对象需要直接或间接的继承自 NSObject。Objective-C 的 @interface 相当 java 的 class,而 @protocol 才是 Java 的 interface。类声明的基本方式如下:

@interface <#class#> : <#superclass#>
{
   <#ivars#>
}

<#methods#>

@end 阅读全文 >>

XCode 3 中我的常用快捷键

适时的使用快捷键会提高工作的效率,可以让你的手尽量少的在键盘与鼠标间漂移,就像玩帝国与星际时不用快捷键一般会死得快一样,当然不乏一些特牛的人了。培养使用快捷键最好的办法是,当你需要用哪个菜单项,点击鼠标的同时请留言所提示的快捷键,下次尽量用快捷键来做同样的事情,培养习惯,甚至是肌肉记忆。记得 Eclipse 有那么一个插件,当你用鼠标操作了,如果有相应的快捷键,它会在显著的地方告诉你对应的快捷操作键。

下面是我日常中使用 概率比较高的 XCode 快捷键键。假如你用的是 PC 键盘的话,就要分清哪个是 Command 键,哪个是 Option。比如同一个 USB PC 键盘,我在 VirtualBox 中装的 Mac 系统,Alt 是 Command 键,Win 是 Option 键,VMWare 中的 Mac 系统则相反。

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       打开编译结果窗口,显示编译详细信息

阅读全文 >>

命令行下创建 Android 工程,用 Ant 进行编译部署

安装完 Android SDK 后可以在命令行下 Android.bat 命令创建一个示例项目,有 Ant 的话还可直接用 Ant 来编译部署到模拟器上运行。

环境准备:

告诉 path 要指向到 Android SDK 目录的 tools 子目录中,如 d:\android-sdk-windows\tools
要用 ant 编译部署的话,再把 ant 的 bin 目录加入到 path 上,如 D:\apache-ant-1.8.2\bin

CMD 进到命令行下,执行:
android create project -k cc.unmi.android.test -n Hello -a HelloAndroid -t 5 -p c:\TestAndroid

注:以上各参数的意义,可参考:http://developer.android.com/guide/developing/projects/projects-cmdline.html
-k 工程包名: cc.unmi.android.test
-n 工程名  : Hello 阅读全文 >>

Android Dalvik虚拟机初识 分享

首先,让我们来思考下面几个问题:

什么是Dalvik虚拟机?

Dalvik VM与JVM有什么区别?

Dalvik VM有什么新的特点?

Dalvik VM的架构是怎么样的?

首先,我得承认第一个问题问得很傻:什么是Dalvik虚拟机?没有人给出过一个明确的定义,但是,我们似乎可以从人们对Java虚拟机的描述中得到些信息。

Java 虚拟机(JVM)是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。它有自己完善的硬件架构(如处理器、堆栈、寄存器 等),还具有相应的指令系统。使用“Java虚拟机”程序就是为了支持与操作系统无关、在任何系统中都可以运行的程序。 阅读全文 >>

Android 开发者官网镜像站点收集

怎么都搞不明白,一个纯技术性的网站 Android 开发者 http://developer.android.com/ 会被墙,找不到合适的理由。仅仅是出自于 Google,因 Google 不听 ZF 的话受影响?Android 牵动了什么人的神经,影响了什么群体的利益?

作技术的不能因为正常方式访问不了就不去另想他途,翻墙方式的种种这里不累述了。我们不会像多数人一样,以为搜索引擎只有一个百度(多数人其实根本不知道那个叫做搜索引擎)。在常规方式下,幸好还有不少 Android 开发者网站的镜像可以访问,虽然有些并不能非常及时的跟进同步,但也足够用的。

这里就收集一些可访问的 Android 镜像站点,千万不能因为我把它们集中在一块而给某些别有用心的人得了方便,而后害了那些热心的网站,那我可真的是很无聊。随着 appspot.com 的不幸,也让 http://androidappdocs.appspot.com 失效了。如果还有别的镜像站点,希望大家多多提供,谢谢啦。 阅读全文 >>

解决 Eclipse 中 Android.jar 无法关联源代码的办法

在 Eclipse 中一般的 jar 包在(F3 或 Ctrl + Click) 进到它的 Class 时,如果没有关联上源代码会有一个按钮让你关联下就可以查看源代码。可是在 Eclipse 中的 android.jar 中的类,却只会提示

Source not found
The JAR of this class file belongs to container 'Android 1.6' which does not allow modifications to source attachments on its entries.

也就是正常渠道关联不上源代码,那使用手动来引入 android.jar,用传统的方式来关联源代码如何,源码是能看到了,可是出现个错误。还是 Google 下吧,找到了 Browsing Android Source in Eclipse,他给我们提供了两种解决办法:

#Solution 1 阅读全文 >>