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 #> { 阅读全文 >>

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" 一样 阅读全文 >>