Ios '的功能;自我';在Obj-C代码中?

Ios '的功能;自我';在Obj-C代码中?,ios,objective-c,Ios,Objective C,我正在读斯坦福iOS iTunes课程的第二堂课,并坚持使用关键词self。它以两种不同的方法出现,我很难理解self到底指的是什么,以及为什么我们需要包含self 我们已经创建了一个名为Card的类,现在正在创建一个名为Deck的新类来管理一组卡片。对于addCard:atTop:方法中的self.cards的功能,我尤其不确定。我只是不知道为什么使用self。为什么不推断出来,它指的是什么 它也出现在第二种方法中,addCard:,我也不确定self指的是什么。它只是指addCard:?如果

我正在读斯坦福iOS iTunes课程的第二堂课,并坚持使用关键词
self
。它以两种不同的方法出现,我很难理解
self
到底指的是什么,以及为什么我们需要包含
self

我们已经创建了一个名为Card的类,现在正在创建一个名为Deck的新类来管理一组卡片。对于
addCard:atTop:
方法中的
self.cards
的功能,我尤其不确定。我只是不知道为什么使用self。为什么不推断出来,它指的是什么

它也出现在第二种方法中,
addCard:
,我也不确定self指的是什么。它只是指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
Deck.h文件
#进口
#导入“Card.h”
@接口组:NSObject
-(void)addCard:(Card*)Card atTop:(BOOL)atTop;
-(作废)添加卡:(卡*)卡;
-(卡*)提款卡;
@结束
Deck.m文件
#导入“Deck.h”
@接口组()
@属性(强、非原子)NSMutableArray*卡;//卡片的
@结束
@实现平台
-(NSMutableArray*)卡
{
退卡;
}
-(void)addCard:(Card*)Card atTop:(BOOL)atTop
{
if(atTop){
[self.cards-insertObject:card-atIndex:0];
}否则{
[self.cards addObject:card];
} }
-(无效)添加卡:(卡*)卡
{
[自我添加卡:卡地址:否];
}
-(卡片*)提款卡{}
@结束

在Objective-C中,方法调用的符号是

[对象消息:参数]

如果要将消息发送到
,则需要知道要引用其卡元素的卡组实例

因此,当您说
self.cards
时,它会说“我希望当前甲板实例中的cards元素”


因此,
self.cards
是Objective-C调用中的“对象”。

当您有一个像put这样的类时,您不能只调用没有对象的方法。首先,您必须这样做:

Deck* myDeck = [[Deck alloc] init];
稍后,如果执行此操作:

[myDeck addCard:myCard atTop:YES];

它调用
myDeck
上的方法
addCard:onTop:
。在方法中的代码中,
self
现在指的是
myDeck
,允许我们将卡片添加到正确的卡片组中。如果稍后在
Deck
的不同实例上调用该方法,
self
将引用该实例。

摘自维基百科文章:

自我自我在某些计算机编程中使用 语言,以引用 当前运行的代码是的一部分。本协议所指的实体 关键字因此取决于执行上下文(例如哪个对象) 正在调用其方法)。不同的编程语言使用 这些关键字的方式略有不同。使用 像“this”这样的关键字是必须的,关键字是 访问存储在当前对象中的数据和方法。如果可选, 它们可以消除同名变量和函数的歧义


self=这是(C++)或我(VB)的好解释。对于不熟悉面向对象编程的人来说,这经常会让你绊倒。编写init时,实际上是在创建对象的实例。如果希望该对象执行某些操作,则需要引用该实例。我花了一段时间才弄明白。不过,在这堂课上,你不是一直在使用当前的Deck实例吗?为什么你需要包括自我?比如为什么不直接写[cards message:argument]来代替呢?如果你是在“类方法”中,就不会了。它们以“+”而不是“-”开头。此外,如果你在一个功能的甲板,采取甲板和复制它。然后你有了
self.cards
argumentDeck.cards
。好了,现在把它弄得好些。阅读其他链接的PG。谢谢你的帮助。