- iOS(iPhone/iPad) 下图形组件有两个有名的,s7graphview 和 Core 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 Read More 对于 Unix 族下的文本编辑器,VI 功能稍弱,Emacs 的能力是没得说,但学习曲线太陡峭了,于是簇拥到 TextMate 旗下。快捷键能让你大大的提 升使用的效率,它可以让你的手尽量少在键盘与鼠标之间飘来飘去。相比于 Windows 平台,Mac 更推崇使用快捷键来操作,搭配着大大的触摸板后,鼠标真的就有点多余了。
这里列出的所谓通用快捷键是不怎么涉及那些 Bundle 中的特定的快捷键而言的,还有些是系统通用的快捷方式也会提到
1. mate 命令:
mate . 以当前目录启动一个项目
mate a.txt b.txt *.csv afolder afolder/bfolder 指定文件、通配符的方式,或目录来启动一下项目Read More1command + option + L 显示行号 2ctrl + R 执行光标前或选择的 shell 命令,并把执行结果输出到当前位置 3ctrl + L 把当前行试图移动屏幕中央 4ESC 自动补全- 本篇是介绍来自于 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> Read More - 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];
Read More - 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 总是推动大家用新版本的东西。 Read More - 在 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 Read More - 刚开始写 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,写成了: Read More - 从 Xcode3 升级到 Xcode4 的一些使用体验:
1. 注释的时候更智能,按 Command + / 时不会像 Xcode3 里那样在光标处插入 //,而是会在行首加 //,并且多行注释时 // 很整齐了
2. 大括号有自动补齐的功能了,方法后输入左花括号 { 后,右边的花括号 } 由 Xcode 自动加上。
3. 智能提示中的内容丰富的多,方法的参数返回类型看得很清楚,尚不明最前面标识的 K、f、P、V、x、T、C、M、#等是什么意义,不过也差不多有些概念了。
4. @interface 的模板也不一样了,出现默认 @private 修饰关键字,这是对的,默认的实例变量应该是隐藏的,@interface 的模板是:
@interface <# class name #> : <# superclass #> { Read More - 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 的那些可变参函数,可能反而令你感到费解,还不如来试个实际的例子:Read More1- (void)foo:(NSString *)format, ... 2{ 3 va_list args; 4 va_start(args, format); 5 NSString *str = [[NSString alloc] initWithFormat:format arguments:args]; 6 va_end(args); 7 8 printf([str UTF8String]); 9 10 [str release]; 11} 12 13- (IBAction) doo: (UIButton*) sender 14{ 15 //须留意不定参函数的调用格式,逗号分隔的序列,应该它们整体是作为函数的一个参数传入 16 [self foo : @"My name %@, %@", @"Unmi", @"Yes"]; 17} - 话说在 Objective-C 里声明指针变量时,星号(*) 该放到哪个位置,是紧贴变量类型,紧贴变量名还是放它们之间两边用空格,或者全挤在一起?到底还是在思考 C/C++ 中指针变量的声明风格,因为 Objective-C 是 C 的超集。
纯粹讲 Objective-C 的代码风格,我觉得 Google 的 Google Objective-C Style Guide 非常有指导意义。转回来看 Objective-C 声明指针变量时什么风格好些,下面四种都符合语法:。看显然,第四种风格是最不好看的,就像有人写 SQL 喜欢 “select*from table1" 一样 Read More1 NSString * name1 = @"Unmi"; //1. * 与变量类型与变量名之间都有空格<br/> 2 NSString* name2 = @"Unmi"; //2. * 紧挨变量类型,我推荐这种<br/> 3 NSString *name3 = @"Unmi"; //3. * 紧挨变量名<br/> 4 NSString*name4 = @"Unmi"; //4. * 变量类型、*、变量名紧挨在一起<br/> 5 NSLog(@"%@, %@, %@, %@", name1, name2, name3, name4);