请选择 进入手机版 | 继续访问电脑版

苹果发烧友论坛

 找回密码
 注册
楼主: lululau

[其他] 又入两本书~~

  [复制链接]
发表于 2010-1-1 00:14:26 | 显示全部楼层
建议买台湾出版的~~
回复 支持 反对

使用道具 举报

发表于 2010-1-1 01:49:57 | 显示全部楼层
也准备入一本
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-1 23:10:09 | 显示全部楼层
不知道有谁看过objc基础教程这本书

书上133页最后10行那段代码绕了我半天
现在我认定书上的这段代码应该是错的。

书上的代码是:

  1. Engine *engine = [Engine new];
  2. Car *car1 = [Car new];
  3. Car *car2 = [Car new];
  4. [car1 setEngine: engine];
  5. [engine release];
  6. [car2 setEngine:[car1 engine]];
复制代码
我认为应该改为:

  1. Engine *engine = [Engine new];
  2. Car *car = [Car new];
  3. [car setEngine:engine];
  4. [engine release];
  5. [car setEngine:[car engine]];
复制代码
回复 支持 反对

使用道具 举报

发表于 2010-1-2 09:11:57 | 显示全部楼层
多少钱一本?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-2 16:18:48 | 显示全部楼层
这两天把Objective-C基础教程这本书突击完了
除了一些低级失误之外,这本书整体说还不错,比较适合objc初学者
尤其结合MDC中的《The Objective-C Programming Language》文档学习,效果会比较好
objc这个语言,我的总体感觉是语法很怪异(书上说它的OO语法来自SmallTalk),最受不了的就是它用[]作为方法调用运算符。MDC中的那篇文档居然还把object.property这种东西叫语法糖。
Foundation/AppKit类中的方法命名风格也比较另类
垃圾回收机制并不总是可用的,一般必须自己管理内存,比如要开发支持旧版本Mac OS X或者iPhone OS的应用。
但是objc也有比较好玩的地方
比如它的Category,感觉有点像JS的prototype;它的property/synthesize,这个有点像Ruby,不需要自己写getter/setter方法;还有KVC和断言,用起来也应该比较舒服。
今天又拍了一本《Cocoa Programming for Max OS X》,呵呵,过两天到了上图
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-2 16:19:31 | 显示全部楼层
16# rick0530

当当上有价格
不贵,这两本书都比较薄的
回复 支持 反对

使用道具 举报

发表于 2010-1-2 16:35:42 | 显示全部楼层
刚从图书馆借了这两本
回复 支持 反对

使用道具 举报

发表于 2010-1-2 16:38:17 | 显示全部楼层
不知道有谁看过objc基础教程这本书

书上133页最后10行那段代码绕了我半天
现在我认定书上的这段代码应该是错的。

书上的代码是:
Engine *engine = [Engine new];
Car *car1 = [Car new];
Car *car2 = [Ca ...
lululau 发表于 2010-1-1 23:10


代码本身应该没什么问题,问题在于它用这段代码要干嘛
回复 支持 反对

使用道具 举报

发表于 2010-1-11 12:33:09 | 显示全部楼层
本帖最后由 pdf899 于 2010-1-11 12:37 编辑
不知道有谁看过objc基础教程这本书

书上133页最后10行那段代码绕了我半天
现在我认定书上的这段代码应该是错的。

书上的代码是:
Engine *engine = [Engine new];
Car *car1 = [Car new];
Car *car2 = [Ca ...
lululau 发表于 2010-1-1 23:10


配合原文里的
- (void) setEngine: (Engine *) newEngine
{
[engine release]; engine = [newEngine retain];
// More BAD CODE: do not steal. Fixed version below. } // setEngine
他想让你弄明白用上面的setEngine定法,[engine release]后,再[car setEngine:[car engine]];就不对了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2010-1-11 17:20:48 | 显示全部楼层
问题是书上的代码里没有[car setEngine:[car engine]]这句,这句我是改的
回复 支持 反对

使用道具 举报

发表于 2010-1-22 14:30:01 | 显示全部楼层
Cocoa Programming for Max OS X 3rd
这本书还可以,话说我都看了17章了
中文翻译版的PDF 只有18章
正准备在当当网上面买一本54块
回复 支持 反对

使用道具 举报

发表于 2010-1-28 16:28:57 | 显示全部楼层
本帖最后由 glider 于 2010-1-28 16:34 编辑

我觉得原书没错。
setEngine:里已经retain了对应的object,自然[car engine]依然可以得到对应的对象。
简单理解:
engine = [Engine new]; // engine refcount=1

[car1 setEngine:engine]  // engine refcount=1
                                         // After call, engine refcount=2, car1 hold the object

[engine release];         //  engine refcount=2
                                    //   After call, engine release , refcount back to 1

[car2 setEngine:[car engine]];   //engine refcount=1
...                                               // After call, engine refcount=2  ,car1 and car2 hold the object
...
回复 支持 反对

使用道具 举报

QQ|小黑屋|手机版|Archiver|苹果发烧友论坛 ( 京ICP备16012027号-3 )

GMT+8, 2017-7-20 20:30 , Processed in 0.014761 second(s), 7 queries , Xcache On.

Powered by Discuz! X3.3 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表