64位编程:整数/小数
A 对应64位编程的时候,
对于整数应使用NSInteger和NSUInteger,而非int
对于小数应使用CGFloat,而非float
NSInteger其实是一个自动定义,在32位中为int,而64位中为long。CGFloat的原理类似
IPhone, Cocoa, PHP, Javascript, JQuery, Actionscript, etc…
Archive for 六月 2009
A 对应64位编程的时候,
对于整数应使用NSInteger和NSUInteger,而非int
对于小数应使用CGFloat,而非float
NSInteger其实是一个自动定义,在32位中为int,而64位中为long。CGFloat的原理类似
W 问题一:
value = [array objectAtIndex:n]; //得到一个数组中的对象 [arry removeObjectAtIndex:n]; //卸载那个对象
因为value得到了那个对象,但是由于另外一个拥有者release了该对象,所以其实value现在成了摇摆指针(无效数据)
问题二:
myArray = [NSArray array]; ... [myArray release];
NSArray返回的是一个自动释放对象,不仅myArray不应该在一段时间后release,而应该在适当的时候先retain,以防止该array被系统误释放。
问题三:
rocket = [rocketLauncher aRocket]; [rocketLauncher release];
和array这种数据收集类对象一样,如果我们得到了一个类的子对象而不retain它,那么在原父类被释放的时候,这个rocket其实也会失去其意义。
H 混合内存管理环境:垃圾收集法(Garbage Collection)+索引计数法(Reference Counting)
虽然大多数情况下混合环境是不被推荐的,但是如果在这个情况下,autorelease需要注意以下事项:
垃圾收集混合环境下:应该使用drain方法,因为release在GC模式下没有意义
索引计数环境下:drain和release对于autoreleasepool(自动释放池)的效果相同
A Cocoa的内存管理分为 索引计数法(Reference Counting/ Retain Count)和 垃圾收集法(Garbage Collection)。而iPhone上目前只支持前者,所以autorelease就成为很多人的“捷径”。
但是!autorelease其实并不是“自动释放”,不像垃圾收集法,对对象之间的关系侦测后发现垃圾-删除。但是autorelease其实是“延后释放”,在一个运行周期后被标记为autorelease会被释放掉。
切记小心使用autorelease,理解autorelease,防止在你还需要该对象的时候已经被系统释放掉了。
D
得到Document目录:
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSString *documentsDirectory = [paths objectAtIndex:0];
得到temp临时目录:
NSString *tempPath = NSTemporaryDirectory();
得到目录上的文件地址:
NSString *文件地址 = [目录地址 stringByAppendingPathComponent:@"文件名.扩展名"];
R 来做一个小小随机数生成器吧!从1-100~
***Safari浏览的时候似乎会很乱… 换Firefox看这个帖子吧



// // rndNo.m // RandomNumber // // Created by Zhengliang Guo on 09-6-17. // Copyright 2009 gzl.name All rights reserved. //
这个程序非常简单,首先建立一个类,选一个自己喜欢的名字:


看看头文件里面有什么呢?
@interface rndNo : NSObject { IBOutlet NSTextField *textField; } -(IBAction)resetSeed:(id)sender; -(IBAction)genderateNo:(id)sender; @end
m文件里面的洞天:
-(IBAction)resetSeed:(id)sender{ srandom(time(NULL)); [textField setStringValue:@"随机数种子已重置"]; } -(IBAction)genderateNo:(id)sender{ [textField setIntValue:(random()%100 +1)]; }
在IB里面建立一个对象,然后指定他的类为我的rndNo.

//记得将IBAction和IBOutlet连接正确噢~否则不会好使的。 //不会在Xcode里面连接对象?在我的博客里面搜索一下吧!
让我们的程序在点击关闭红点的时候也关闭吧:
首先添加所需的事件代理到m文件:
- (void)windowWillClose:(NSNotification *)notification //当窗口关闭的时候 { exit(1); //我们退出程序 }
右键点击我们的窗口,然后将delegate连接到我们建立的对象上

//编译运行!大功告成,还不赶快自己也试试!T 多线程编程是防止主线程堵塞,增加运行效率等等的最佳方法。而原始的多线程方法存在很多的毛病,包括线程锁死等。在Cocoa中,Apple提供了NSOperation这个类,提供了一个优秀的多线程编程方法。
本次讲解NSOperation的使用方法:
1,将想在另外一个线程的工作单独成类,并设置其父类为NSOperation:
@interface ImageLoadingOperation : NSOperation { NSURL *imageURL; //这个例子里面需要传入一个图片地址,所以定义一个NSURL变量 id target; //由于需要返回一些值,所以需要一个对象参数返回要被返回的对象(运行此线程的类对象) SEL action; //返回值要激发的方法函数 }
2,借由其初始化方法来传入所需要的参数和对象
- (id)initWithImageURL:(NSURL *)theImageURL target:(id)theTarget action:(SEL)theAction { self = [super init]; //在老帖里面解释过为什么需要这么做了 if (self) { imageURL = [theImageURL retain]; // 拷贝进对象,并retain(为什么?请查老帖) target = theTarget; action = theAction; } return self; }
呼叫这个类对象的时候,传入所需要的参数和对象
// 这些是需要对其初始化的类中的代码 ImageLoadingOperation *operation = [[ImageLoadingOperation alloc] initWithImageURL:url target:self action:@selector(didFinishLoadingImageWithResult:)]; //初始化 [operationQueue addOperation:operation]; //添加到运行队列 [operation release]; //由于队列对其retain,所以我们需要release它
3,在我们的线程操作类中的main函数执行所需要的工作
- (void)main { // 同时载入图片 NSData *data = [[NSData alloc] initWithContentsOfURL:imageURL]; UIImage *image = [[UIImage alloc] initWithData:data]; // 打包返回给初始类对象,然后执行其指定的操作 NSDictionary *result = [NSDictionary dictionaryWithObjectsAndKeys:image, ImageResultKey, imageURL, URLResultKey, nil]; [target performSelectorOnMainThread:action withObject:result waitUntilDone:NO]; [data release]; //不需要了就清理 [image release]; }
这些就是一个简单的NSOperation的使用过程了。其实看看嘛,非常简单的,正如苹果为我们准备的其他API一样!
S
control-F: 向右一个字符(forward)
control-B: 向左一个字符(backward)
control-P: 前一行(previous)
control-N: 后一行(next)
control-A: 去行首
control-E: 到行尾(end)
control-T: 调换光标两边的字符(transpose)
control-D: 删除光标右侧字符(delete)
control-K: 删除本行剩余的字符(kill)
control-L: 居中插入点到屏幕中央(lock)
SQLite的命令行接口是很好用的,但是拥有一个图形界面管理器还是非常可心的事情。
本来是在SQLite自己的网站上苦苦查找免费工具,但是好东西却在Firefox的插件里。
看来评价还是蛮不错的,下载试试吧!

图形界面是非常简单的,由于是基于Firefox的插件开发,该工具拥有跨平台的超级优势。对中文的支持也非常帮,英语好得朋友不妨试试。

KiAnG自CS193P的笔记:
