-(void)setFaceView:(FaceView *)faceView
{
_faceView= faceView;
self.faceView.dataSource = self;
}
我刚开始通过 iTunes 上著名的斯坦福讲座学习 IOS 编程。我目前正在上第 6 课,我开始难以跟上课程的进度。
这是一个非常基本的东西,但我真的不明白“自我”是如何工作的。谁能教我这段代码中的“自我”在做什么?
-(void)setFaceView:(FaceView *)faceView
{
_faceView= faceView;
self.faceView.dataSource = self;
}
我刚开始通过 iTunes 上著名的斯坦福讲座学习 IOS 编程。我目前正在上第 6 课,我开始难以跟上课程的进度。
这是一个非常基本的东西,但我真的不明白“自我”是如何工作的。谁能教我这段代码中的“自我”在做什么?
self
是实例方法的objective-c中的一个隐式参数,它指的是执行该方法的对象-请参见此处:给Self和Super的消息
在这种情况下,self.faceView
调用绑定到运行此方法的实例的 faceView 的属性访问器,而赋值_faceView= faceView;
是将输入参数分配给faceView
iVar _faceView
。self.faceView.dataSource = self;
将执行此方法的对象分配给对象dataSource
属性的faceView
属性。
self 是对象本身。当你分配一个对象时。它留出足够的内存来保存该类将使用的所有变量。
但是,当您初始化对象时,您将该内存附加到自身。self 本质上是一个“变量”(我松散地使用这个词),它使您可以访问您所在对象的所有功能。
如果您有使用以下方法的对象
+(BOOL) isThisWorking{ return YES;}
您将不得不在类上调用该方法。不涉及自我。
但是,如果您有方法
-(BOOL) isThisWorking{ return YES; }
那么您将有一个附加到类实例的方法。
调用第一个将要求您在类对象本身上调用它。
[MyObject isThisWorking];
调用第二个将要求您在实例上调用它。
MyObject *testObject = [[MyObject alloc] init];
[testObject isThisWorking];
当您在测试对象中的方法中时,您将没有“testObject”来调用方法。
自我填补了这个空白。
如果您来自另一种编程语言,您将熟悉做同样事情的其他结构。
例如在 .net 中,对象是“this”
如果我没记错的话,在老学校VB中,对象是“我”