self是否曾用于返回Objective-C中对类的引用?

时间:2010-10-20 02:10:01

标签: objective-c

我正在编写一本关于Cocoa和Objective-C的书。一个例子让我难过:

- (id) currentObject {
   return [Photo photo];
}

- (void) checkObjectType {
    id object = [self currentObject];
    ...
}

在这种情况下,checkObjectType调用currentObject。然后,currentObject返回Photo的一个实例,然而,它正在创建一个新的Photo实例并返回此引用,不是吗?是不是不回复自己的引用?我期待的是:

return self;

谢谢,

斯科特

3 个答案:

答案 0 :(得分:2)

你一定是指斯科特史蒂文森的书。给出的示例只是试图展示如何使用isMemberOfClass:方法。我不会再读它了。

你的困惑是可以理解的。正如您已经想到的那样,currentObject:方法返回一个新创建的自动释放对象,该对象本身,因为它的名称将暗示。这是一个命名不佳的方法。也许这只是一种提醒读者恰当地命名方法的偷偷摸摸的方式。 :)

答案 1 :(得分:1)

我可能会把它搞砸但是这里......

您的代码段在一个类中。该类有一个名为currentObject的方法,它返回一个Photo对象。

  

id object = [self currentObject];

这要求当前的类self调用方法currentObject,这恰好是Photo对象。拍摄该照片对象并将其指定给object

如果本书的部分正在讨论类型id,那么这似乎是方法的一个静态示例,旨在说明(id)方法如currentObject如何返回任何方法一种对象。

也许有一个更好的例子:

- (id) currentObject:(NSString *)someKey {
   return [someDictionary objectForKey:someKey];
}

- (void) checkObjectType {
    id object = [self currentObject:@"photo"];
    ...
}

其中someDictionary包含各种对象,如NSString,Photo和NSURL。 currentObject可以处理所有问题。

答案 2 :(得分:0)

是的,currentObject正在返回[Photo photo]的结果。假设正在遵循正常的Cocoa命名约定,Photo是一个类(因为它以大写字母开头),因此+photo是一个类方法(可能)返回{{1的实例} .class。由于方法名称不包含Photoalloc,因此我们可以进一步推断它返回一个自动释放的对象。

“currentObject”方法名称在这个例子中确实令人困惑,但这样做:

copy

完全没有意义:- (id) currentObject { return self; } 与说[self currentObject]

相同