下面的代码来自Objective-C中iPhone开发人员的iTunes U类(class)。我已经阅读了Apple文档,除了self之外,其他所有内容都非常清楚。我有点理解自我是自己的指针,但是那到底是什么意思呢?在下面的代码中,self到底是什么意思?实现文件中的self.topSpeed和self.nearestWormhole有什么区别?或者self两次都引用相同的东西吗? self.topSpeed是否引用Planet *,self.nearestWormhole是否引用Wormhole *吗?感谢所有回答,我学会了C语言,现在尝试学习OOP,因此感谢任何输入。

(Header file)
#import "Vehicle.h"
#import "Planet.h"
@interface Spaceship : Vehicle
@property (nonatomic) double topSpeed;
- (void)orbitPlanet:(Planet *)aPlanet
         atAltitude:(double)km;
@end





(Implementation file)
#import "Spaceship.h"
@interface Spaceship()
@property (nonatomic, strong) Wormhole *nearestWormhole;
@end

@implementation Spaceship
@synthesize topSpeed = _topSpeed;
@synthesize nearestWormhole = _nearestWormhole;

- (void)setTopSpeed:(double)speed
{
    if ((speed < 1) && (speed > 0)) _topSpeed = speed;
}

- (void)orbitPlanet:(Planet *)aPlanet atAltitude:(double)km
{
    double speed = self.topSpeed;
    if (speed > MAX_RELATIVE) speed = MAX_RELATIVE;
    [self.nearestWormhole travelToPlanet:aPlanet
                                 atSpeed:speed];
}
@end

最佳答案

self(或C++中的this)是指正在执行方法的对象(或“在其上调用方法”的对象)。
假设我有一间有三个人的房间,分别是亚瑟(Arthur),贝蒂(Betty)和齐吉(Ziggy),还有一顶帽子。我们还定义

我想对所有三个人给出以下说明:
1.在Ziggy的头上戴一顶帽子。
这很容易。 “Ziggy”与Arthur,Betty甚至Ziggy的含义相同。无论谁遵循此指示,同一个人都会戴上帽子。
2.如果有,请在老师的头上戴一顶帽子。
该说明会因跟随者的不同而有不同的效果,因为老师指的是每三个不同的人。但是每个人都可以问自己:“如果我有老师,我的老师是谁?”并找到那个人。
但是我接下来要说的是,亚瑟要在亚瑟的头上戴上帽子,贝蒂要在贝蒂的头上戴上帽子,齐吉要在齐吉的头上戴上帽子。我们不能用名字来指称那个人(例如Ziggy),因为它取决于谁在做。假设我们像对待“老师”一样对待它,并建立一个变量“foo”,使得亚瑟的foo是亚瑟,贝蒂的foo是贝蒂……但是很明显,我们真正表达的想法是Ziggy的foo是Ziggy,而Jack的foo将是Jack,而Skip的foo将是Skip ...我们真的需要建立一个“foo”吗?不!每个人都有一个foo:这是您的自我。因此,让我们定义一个隐式变量“self”,该变量在任何地方都未声明,但始终是指执行该操作的人。
3.在自己的头上戴上帽子。
这适用于亚瑟(Arthur),贝蒂(Betty),齐吉(Ziggy)甚至 jack (Jack)。它适用于任何人。
在您的代码中self指的是需要访问topSpeed的 spaceship 。您创建了许多宇宙飞船,每个宇宙飞船都需要知道一个存在的宇宙飞船的topSpeed(我们知道是因为它在调用方法),但是没有名字(例如myWingman.topSpeed)-一个人的self

关于objective-c - 在Objective-C中了解自我,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9287332/

10-12 07:34