Objective-C 的方法原型及重载

毫无疑问,Objective-C 也是一种面向对象语言,那么面向对象有三个基本特征(封装、继承、多态)。重载似乎与这三大特征没多大关系,方法覆盖才预示着多态。但重载还是与覆盖有一定的关联,它们都要求你能识别出方法的原型,这就引出方法原型与重载的关系。

Objective-C 与最常见的语言如,C++、C#、Java 在这方面是不同的,我们知道,Java、C++ 和 C# 识别方法原型是依据于方法名、参数个数、与参数类型这三要素决定,比如下面出自于一个类中的四个计算面积的方法,对于 Java、C++ 或 C#,它们是合法的:

float calculateArea()
float calculateArea(int width)
float calculateArea(float width)
float calculateArea(int width, int height)

因为它们的方法原型是不同的,分别是: 阅读全文 >>

如何使用 Core Plot 的 API 帮助文档

Core Plot 可是 iOS 下绝好的图表组件,虽说它的相关资料不甚丰富,特别是中文的,英文的还是有几篇不错的文章,不过 Core Plot 自身提供的 API 帮助文档,以及代码示例其实很有用的,不妨且在英文的(注意是英文的) Google 中输入 core plot, 即时搜索出的第一页里的链接很有价值的。

对于 Core Plot 中文资料的缺乏相信很快就会有改观的,譬如说不还有不少像敝人那样的工作者正努力着吗!

既然 Core Plot 为我们提供了文档,那我们就该好好利用好它内在的东西。都是在下载的 CorePlot_0.4.zip 解压后的 CorePlot_0.4 目录中的,Source/examples 下有周到的示例代码,Source/framework  中源代码; Documentation  中便是我们可以查阅的 Core Plot 的 API 帮助文档,有两种使用方式,导入到 Xcode 和浏览器阅读。 阅读全文 >>

iOS 使用 Core Plot 绘制统计图表入门

iOS(iPhone/iPad) 下图形组件有两个有名的,s7graphviewCore Plot,它们都是在 Google 上托管的代码,听说 Core Plot 比较强,因为前者仅支持曲线图,后者呢曲线图、饼图、柱状图等通吃,且较活跃。那就专注下 Core Plot 的使用。它提供了 Mac OS X 和 iOS 下的组件库,我只用到它的 iOS 图表库。

Core Plot 能画出来图表的效果应该多看看:http://code.google.com/p/core-plot/wiki/PlotExamples,相信看过之后绝大多数的 iOS 下的图表可以用它来满足你了。

配置其实很简单的,先从 http://code.google.com/p/core-plot/downloads/list 下载最新版的 Core Plot,比如当前是:CorePlot_0.4.zip,解压开,然后就两步:

1. 把目录 CorePlot_0.4/Binaries/iOS 中的 libCorePlotCocoaTouch.a 和整个子目录 CorePlotHeaders 从 Finder 中一并拖入到当前项目中,选择 Copy item into destination group's folder (if needed),Add to targets 里选上相应的 target。此时你可以在项目的 target 中 Build Phases 页里 Link Binary With Libraries 中看到有了 libCorePlot-CocoaTouch.a.

2. 再到相应 Target 的 Build Settings 页里,Other Linker Flags 项中加上 -ObjC -all_load 阅读全文 >>

TextMate 通用快捷键

对于 Unix 族下的文本编辑器,VI 功能稍弱,Emacs 的能力是没得说,但学习曲线太陡峭了,于是簇拥到 TextMate 旗下。快捷键能让你大大的提 升使用的效率,它可以让你的手尽量少在键盘与鼠标之间飘来飘去。相比于 Windows 平台,Mac 更推崇使用快捷键来操作,搭配着大大的触摸板后,鼠标真的就有点多余了。

这里列出的所谓通用快捷键是不怎么涉及那些 Bundle 中的特定的快捷键而言的,还有些是系统通用的快捷方式也会提到

1. mate 命令:

mate .      以当前目录启动一个项目
mate a.txt b.txt *.csv  afolder afolder/bfolder  指定文件、通配符的方式,或目录来启动一下项目

阅读全文 >>

TextMate 编辑 HTML 使用的快捷键记录

本篇是介绍来自于 HTML Bundle 的快捷键

1. 产生 HTML 注释 <!-- -->,用 command+/,这与多数 IDE    产生注释的方式是一样的。而要产生多行的注释就用 option+command+/,如:

<!--
    
-->

如果选择文本后按 command+/ 或 option+command+/ 的效果分别是:

<!-- should get
multi-line comments -->

<!--
should get
multi-line comments
-->

⇥ 表示 tab 键,例如应用代码片断的时候,如输入 head,后 tab 键,有多个同名片断时,数字选择就得到完整的代码版断。

2. 插入 html 标签, ctrl+shift+<, 即 Insert Open/Close Tag

输入 html,然后按 ctrl+shift+<,  变为 <html></html>
输入 a id="abc",选择上 a id="abc",就变为 <a id="abc"></a>

3. 包裹上标签,ctol+shift+w,即 Wrap Selection in Open/Close Tag,效果是:

直接按 ctrl+shift+< 和 ctrl+shift+w,的效果是一样的,得到 <p></p>,改前面 p 为 head,就变成 <head></head>
输入 hello 并选择上 hello,然后 ctrl+shift+w 就得到 <p>hello</p>,改前面的  p 为 div,就变成 <div>hello</div> 阅读全文 >>

Objective-C 中一些代码记录

1. 初始化一个空的数组

    NSMutableArray *array = [NSMutableArray arrayWithObjects:nil];
    
    //或者,这里的 Capacity 像 java 的 ArrayList 中的 Capacity
    //NSMutableArray ×array = [NSMutableArray arrayWithCapacity:5];
   
    MSLog(@"%i", [array count]);

如果用到了 alloc 的话,就必须自己处理好相应的 release 操作了,像:

    NSMutableArray *array = [[NSMutableArray alloc] init];
    NSMutableArray *array1 = [[NSMutableArray alloc] initWithCapacity:5];
    NSMutableArray *array2 = [[NSMutableArray alloc]initWithObjects:nil];

阅读全文 >>

Objective-C 的属性与合成方法使用详解

Objective-C 中的属性可以结合 Java 和 C# 的属性来理解,Java 的属性需要自己实现 getter/setter 方法,在 C# 中现在可方便些了,写上{set;get;}自动生成相应的存取器。

Objective-C 中声明属性及使用时会涉及到 @property, @synthesize 和点号(.) 访问,@property 用来指定属性及某些特性,@synthesize 能为你用 @property 指定的属性自动生成 getter/setter 方法。下面最常规的例子:

main.m 代码:本例在 Xcode 4.0.2 中编译运行的, 可能涉及到一些是 Objective-C 的新特性,Apple 总是推动大家用新版本的东西。 阅读全文 >>

Objective-C 的 self 和 super 详解

在 Objective-C 中的类实现中经常看到这两个关键字 ”self” 和 ”super”,以以前 oop 语言的经验,拿 c++ 为例,self 相当于 this,super 相当于调用父类的方法,这么看起来是很容易理解的。以下面的代码为例:

@interface Person:NSObject {
      NSString*  name;
}
- (void) setName:(NSString*) yourName;
@end

@interface PersonMe:Person {
      NSUInteger age;
}
- (void) setAge:(NSUInteger) age;
- (void) setName:(NSString*) yourName andAge:(NSUInteger) age;
@end 阅读全文 >>

does not implement methodSignatureForSelector: -- trouble ahead

刚开始写 Objetive-C 程序,有时候写了一个类时,一调用实例或是类的方法就报错,错误内容大约如下:

2011-06-19 01:14:10.175 Hello World[26080:40b] *** NSInvocation: warning: object 0x4654 of class 'Car' does not implement methodSignatureForSelector: -- trouble ahead
2011-06-19 01:14:10.178 Hello World[26080:40b] *** NSInvocation: warning: object 0x4654 of class 'Car' does not implement doesNotRecognizeSelector: -- abort

调用代码,非常简单,就是:

Car* car = [[Car alloc]init];
[car foo];

看错误仿佛是找不到 foo 方法,可是仔细检查再检查,方法也是有的,也没有打错字。

后来找到原因了,是源自于 Java 代码写多了的缘故,忘记了让自己定义的 Objective-C 类继承自 NSObject,写成了: 阅读全文 >>

Xcode4 相较于 Xcode3 使用中一些体验

从 Xcode3 升级到 Xcode4 的一些使用体验:

1. 注释的时候更智能,按 Command + / 时不会像 Xcode3 里那样在光标处插入 //,而是会在行首加 //,并且多行注释时 // 很整齐了

2. 大括号有自动补齐的功能了,方法后输入左花括号 { 后,右边的花括号 } 由 Xcode 自动加上。

3. 智能提示中的内容丰富的多,方法的参数返回类型看得很清楚,尚不明最前面标识的 K、f、P、V、x、T、C、M、#等是什么意义,不过也差不多有些概念了。

4. @interface 的模板也不一样了,出现默认 @private 修饰关键字,这是对的,默认的实例变量应该是隐藏的,@interface 的模板是:

@interface <# class name #> : <# superclass #> { 阅读全文 >>