说说我和Mac(二)

Panther-X.3-picture

回复 98 可以看 《说说我和Mac(一)》,今天是二。

我在洪恩软件一共工作了3年半的时间,这段经历让我的能力和见识得到了长足的成长。期间做过互联网(没错,就是传说中的第一波互联网神奇泡沫,一触即溃),基于Perl构建洪恩在线网站;做过企业级软件数字校园,基于Java和Jsp技术;做过英语培训软件,基于.Net和C;还管理过儿童产品事业部。不过让人非常伤感的是,我参与的大部分软件项目都以失败告终,洪恩在线遭遇互联网泡沫,数字校园过于超前,销量一般,英语培训碰到2003年非典,完全无人问津。当时洪恩的主要的业务还是电脑教育、高教、英语、儿童软件等,现金流良好。但安则思变,公司开始尝试其他的业务类型,比如互联网、游戏、企业软件、培训等等,这些项目我基本都参与了,但成者寥寥,这对当时年少轻狂的我来说打击非常大,经常参与失败或无疾而终的项目会让人产生对己对人的怀疑和不自信。

要么留下来继续坚持,要么出走寻找新的挑战,这是很多人当时的选择。有些人选择坚持,有些人选择离开,留下的很多技术人员组成了后来的游戏公司完美时空的技术和策划班底,完美时空2007年在纳斯达克上市,目前发展得非常好。离开的人,则就各自有各自的生活和精彩。

所以说选择这个动作真的很神奇,人生漫漫征途,到处十字路口,每次选择就把你带向一个完全不同的路和沿途的风景,我们只能慨叹,嗟夫,人无常势,水无常形。

当时我选择了离开,那段时间是1999到2003年。在这段时期里,地球的那一边,乔布斯正在重新整肃苹果,在进行了精兵健身并相继推出了iMac和iPod,苹果正在一步步走向巅峰,只不过还没有看看到这家没落帝国的潜力,在国内,Mac仍然是稀有物品,我也仅仅见过两款。(待续)

昨天谈了第一季第二季的想法,有读者回复,一季一季也不错,间歇期间可以出点题目之类让大家投稿,分享大家的想法。
这个思路,我觉得不错。

今日Mac技巧:

说完了Objective-C的Category,今天简单说说Protocol。

Protocol,简单来说就是一系列不属于任何类的方法列表,其中声明的方法可以被任何类实现。这种模式一般称为代理(delegation)模式。你通过Protocol定义各种行为,在不同的场景采用不同的实现方式。在iOS和OS X开发中,Apple采用了大量的代理模式来实现MVC中View和Controller的解耦。
 
定义Protocol很简单,在声明文件(h文件)中通过关键字@protocol定义,然后给出Protocol的名称,方法列表,然后用@end表示Protocol结束。在@end指令结束之前定义的方法,都属于这个Protocol。例如:

@protocol ProcessDataDelegate <NSObject>
@required
- (void) processSuccessful: (BOOL)success;
@optional
- (id) submitOrder: (NSNumber *) orderid;
@end

 
以上代码可以单独放在一个h文件中,也可以写在相关类的h文件中,可以视具体情况而定。该Protocol包含两个方法,processSuccessful和submitOrder。这里还有两个关键字,@required和@optional,表示如果要实现这个协议,那么processSuccessful方法是必须要实现的,submitOrder则是可选的,这两个注解关键字是在Objective-C 2.0之后加入的语法特性。如果不注明,那么方法默认是@required的,必须实现。
 
那么如何实现这个Protocol呢?创建一个普通的Objective-C类,取名为TestAppDelegate,这时会生成一个h文件和m文件。在h文件中引入包含Protocol的h文件,之后声明采用这个Protocol即可,如下:

@interface TestAppDelegate : NSObject<ProcessDataDelegate>;
@end

用尖括号(<…>)括起来的ProcessDataDelegate就是我们创建的Protocol。如果要采用多个Protocol,可以在尖括号内引入多个Protocol名称,并用逗号隔开即可。例如<ProcessDataDelegate,xxxDelegate>
 m文件如下:

@implementation TestAppDelegate
- (void) processSuccessful: (BOOL)success{
    if (success) {
        NSLog(@"成功");
    }else {
          NSLog(@"失败");
    }
}   
@end 

由于submitOrder方法是可选的,所以我们可以只实现processSuccessful。

One thought on “说说我和Mac(二)

发表评论