$theTitle=wp_title(" - ", false); if($theTitle != "") { ?>
2008年 8月9日
如果你准备写一个类,希望保证只有一个实例存在,同时可以得到这个特定实例提供服务的入口,那么可以使用单态设计模式。单态模式在Java、C++中很常用,在Cocoa里,也可以实现。
由于自己设计单态模式存在一定风险,主要是考虑到可能在多线程情况下会出现的问题,因此苹果官方建议使用以下方式来实现单态模式:
2008年 7月19日
2008年 7月9日
JSON是一种新的用于在互联网上进行数据交换的标准格式。由于它的冗余、可读性和可解析性都比XML要好,因此JSON这种数据交换格式越来越广泛地运用于Web应用,尤其是Ajax应用中。
在Cocoa中使用JSON也很简单,目前有两个JSON的框架,都很容易使用,而且都对NSDictionary进行了扩展,您可以选择其一将JSON“揉”到您的Cocoa应用程序里。
2008年 6月23日
NSClassFromString是一个很有用的东西,尤其在进行iPhone toolchain的开发上。
正常来说,
id myObj = [[NSClassFromString(@"MySpecialClass") alloc] init];
和
id myObj = [[MySpecialClass alloc] init];
是一样的。但是,如果你的程序中并不存在MySpecialClass这个类,下面的写法会出错,而上面的写法只是返回一个空对象而已。
因此,在某些情况下,可以使用NSClassFromString来进行你不确定的类的初始化。
比如在iPhone中,NSTask可能就会出现这种情况,所以在你需要使用NSTask时,最好使用:
[[NSClassFromString(@"NSTask") .....]]
而不要直接使用[NSTask ...]这种写法。
NSClassFromString的好处是:
1 弱化连接,因此并不会把没有的Framework也link到程序中。
2 不需要使用import,因为类是动态加载的,只要存在就可以加载。因此如果你的toolchain中没有某个类的头文件定义,而你确信这个类是可以用的,那么也可以用这种方法。
2008年 6月20日
通常我们可以使用NSPredicate来进行逻辑计算,不过一般来说代码都很长。
比如考虑,要实现如下逻辑:(A or B) but not (A and B) 需要用很长的一堆代码来实现:
不过如果用了本文介绍的方法,就会简单地变成下面的代码:
2008年 6月16日
Leopard中新增了两个方法,可以将文件移到废纸篓:
FSMoveObjectToTrashSync 和 FSMoveObjectToTrashAsync,分别用于同步和异步删除文件。
OSStatus FSMoveObjectToTrashSync (
const FSRef *source,
FSRef *target,
OptionBits options
);
source: 可以是文件或者文件夹;target可以传递NULL;options可以是以下几项:
enum {
kFSFileOperationDefaultOptions = 0,
kFSFileOperationOverwrite = 0x01,
kFSFileOperationSkipSourcePermissionErrors = 0x02,
kFSFileOperationDoNotMoveAcrossVolumes = 0x04,
kFSFileOperationSkipPreflight = 0x08
};
2008年 6月12日
iChat 4.0新增的iChat Theater功能可以让您在 iChat 视频窗口中演示幻灯片显示。您在桌面上控制演示,而您的好友在他们的桌面上观看演示。在Keynote中,支持这样一种功能:你可以在Keynote中进行幻灯片的展示,通过iChat使好友能够看到你进行的展示。
在Cocoa中,我们同样可以使用这种功能,下面就介绍如何通过Cocoa调用iChat Theater的功能。
2008年 6月6日
mikej的问题:
说到selector有个小问题: 比如我在处理UIButton 响应事件的时候,可能需要对不同按钮执行差不多的函数,比如我在做计算器的时候,按钮123456789,我分别定义成btn1~9,在create buttong时候我在addtarget由于不知道怎么把参数传给一个响应函数,所以只好定义9个接口函数。。。。
2008年 6月4日
通常来说将C++对象做为参数传递给Objective-C的方法中是比较方便的。
举例来说,比如我们有一个NSString的初始化方法,我们希望传递一个std::string做为参数传进去。
只要你传递了对象的指针,事情就完成了,不过你还可以在参数中使用“被指向”的形式,下面用例子来说明。
2008年 5月27日
在大部分比较简单的程序里,资源的管理和使用都是无缝而且自动化的,你无需用程序去干预。
但是如果你的程序趋于成熟,可能在某些情况下你就需要用代码去直接访问资源。直接访问程序中资源的方式也非常直接,下面我们就来介绍一下方法。
2008年 5月24日
在Cocoa中实现文本语音转换(Text to Speech)是很简单的事情。当然,目前只支持英文。
曾经Mac OS 9的时候,苹果官方提供过中文TTS支持,不过可惜的是并没有移植到OSX中。
2008年 5月8日
在Cocoa中,恢复操作(Undo)是一个很有用的功能,但是希望将它整合到Core Data中的人们知道,这个过程可能会有一点令人沮丧。
通常来说,你不需要在意Undo功能,这个内建的功能就可以直接被支持。但是如果你使用了Core Data,情况就会变得复杂一些。
2008年 5月7日
看到Cocoachina讨论区上有人问起NSTextField的问题,翻译一下这篇文章。希望能够对大家有一定的参考意义。
这个代码做的事情很简单,按键盘的“上”,文本框中的数字会增加,反之,按“下”,文本框中的数字会减少。
2008年 4月20日
某些情况下,我们可能需要使用手工编写代码而不是使用Interface Builder建立NSTableView。尤其在我们需要修改NSTableView其中的内容的时候,这变得更加重要,而开发文档中写的不是很清楚。
以下这段简单的代码可以手工创建一个NSTableView,可以帮你节省一点查资料的时间。
2008年 4月12日
上次我们的程序在Window中创建了一个Button,如果这个Button是作为Window的ContentView的时候, 当你改变窗口的时候, 这个Button的大小也跟着改变,而且总是充满了整个Window,但是如果你通过NSView addSubview:把这个Button添加到窗口中的时候, 当你改变窗口大小的时候, 这个Button的位置和大小始终不变,所以当你的窗口的宽度小于Button的Left时,Button就消失了。
熟悉Java或者Unix下面GUI编程的人可能会使用Layout机制来解决这个问题,熟悉Windows的人可能会想到使用OnSize事件来处理这个问题, Cocoa的确在窗口或者Parent View的大小改变的时候发送通知,但是在Cocoa中我们还有另外一种处理方法,这个方法可以称作Sizing Policy,意思是在窗口改变的时候, 对应的Child View或者Control应该如何响应这个改变。