我正在阅读斯坦福大学iOS iTunes课程的第二讲,并坚持使用关键字self
。它出现在两种不同的方法中,我无法理解self
究竟指的是什么 - 以及为什么我们需要包含self
。
我们已经创建了一个名为卡的课程,现在正在创建一个名为 Deck 的新课程来管理一系列卡片。我对self
方法中self.cards
的情况addCard: atTop:
的功能特别不确定。我只是不确定为什么使用自我。为什么不推断它是什么意思?
它也出现在第二种方法addCard:
中,我再次不确定自己指的是什么。它只是引用addCard:?如果是这样,为什么有必要再回头看看自己呢?
非常感谢任何帮助。
Deck .h File
#import <Foundation/Foundation.h>
#import "Card.h"
@interface Deck : NSObject
- (void)addCard:(Card *)card atTop:(BOOL)atTop;
- (void)addCard:(Card *)card;
- (Card *)drawRandomCard;
@end
Deck .m File
#import "Deck.h"
@interface Deck()
@property (strong, nonatomic) NSMutableArray *cards; // of Card
@end
@implementation Deck
- (NSMutableArray *)cards
{
return _cards;
}
- (void)addCard:(Card *)card atTop:(BOOL)atTop
{
if (atTop) {
[self.cards insertObject:card atIndex:0];
} else {
[self.cards addObject:card];
} }
- (void)addCard:(Card *)card
{
[self addCard:card atTop:NO];
}
- (Card *)drawRandomCard { }
@end
答案 0 :(得分:3)
在Objective-C中,方法调用的表示法是
[object message:argument]
如果您要向cards
发送消息,您需要知道哪个Deck实例需要参考哪个卡片元素。
所以,当你说self.cards
时,它说“我想在当前甲板实例中使用卡片元素”。
所以self.cards
是Objective-C调用中的“对象”。
答案 1 :(得分:1)
当你有一个像你这样的课程时,你不能在没有对象的情况下调用它的方法。首先,你必须这样做:
Deck* myDeck = [[Deck alloc] init];
稍后,如果你这样做:
[myDeck addCard:myCard atTop:YES];
它在 addCard:onTop:
上调用方法myDeck
。在方法的代码中,self
现在引用myDeck
,允许我们将卡片添加到右侧套牌中。如果您稍后在Deck
的其他实例上调用该方法,self
将引用该实例。
答案 2 :(得分:0)
摘自维基百科文章:this (computer programming):
某些计算机编程中使用了,自我和我 keywords 语言指的是对象,类或其他实体 目前运行代码是其中的一部分。这些实体所指的实体 因此,关键字取决于执行上下文(例如哪个对象) 正在使用它的方法。使用不同的编程语言 这些关键字的方式略有不同。在语言中 像“this”这样的关键字是必需的,关键字是唯一的方法 访问存储在当前对象中的数据和方法。在哪里可选, 他们可以使用相同的名称消除变量和函数的歧义。