Ios 使用self关键字时的混淆

Ios 使用self关键字时的混淆,ios,objective-c,Ios,Objective C,关于此代码,我有几个问题: #import "ViewController.h" @interface ViewController () @property (copy, nonatomic) NSArray *myArray; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typ

关于此代码,我有几个问题:

#import "ViewController.h"
@interface ViewController ()
@property (copy, nonatomic) NSArray *myArray;
@end

@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.myArray= @[@"one", @"two", @"three", @"four"];
}
我知道self关键字意味着该方法将被发送到该消息的接收者,如果我正在创建一个简单的命令实用程序代码,我知道何时以及如何使用它,但是当我学习创建iPhone应用程序并使用故事板时,每次我看到self关键字都会让我困惑,我不知道哪个对象是接收者
第二个问题,我知道
@[@“object”,“object”]
是创建
NSArray
对象的快速方法,但“myArray”是一个属性,而不是
NSArray
对象。请解释,谢谢。

self
始终与self类相对应。因此,类的每个实例都有自己的实例

在您的例子中,
myArray
是类ViewController的属性。在这里,您可以使用
self.myArray
\u myArray
引用属性

self.myArray= @[@"one", @"two", @"three", @"four"];
在下面的语句中,您将创建一个包含四个字符串的数组,并将其添加到
myArray

self.myArray= @[@"one", @"two", @"three", @"four"];

你在问题中的措辞:

我知道self关键字意味着该方法将被发送到 那个消息的接收者

对于将其用作以下用途的方法调用有效:

[self aMethod];
即使在这种情况下,您也在调用作为类的一部分的方法。如果调用任何不属于当前(self)类的方法,则可以使用该类的对象名来调用它:

SomeClass *someClassObject = ...
[someClassObject itsMethod];

self
始终对应于self类。因此,类的每个实例都有自己的实例

在您的例子中,
myArray
是类ViewController的属性。在这里,您可以使用
self.myArray
\u myArray
引用属性

self.myArray= @[@"one", @"two", @"three", @"four"];
在下面的语句中,您将创建一个包含四个字符串的数组,并将其添加到
myArray

self.myArray= @[@"one", @"two", @"three", @"four"];

你在问题中的措辞:

我知道self关键字意味着该方法将被发送到 那个消息的接收者

对于将其用作以下用途的方法调用有效:

[self aMethod];
即使在这种情况下,您也在调用作为类的一部分的方法。如果调用任何不属于当前(self)类的方法,则可以使用该类的对象名来调用它:

SomeClass *someClassObject = ...
[someClassObject itsMethod];

self
始终对应于self类。因此,类的每个实例都有自己的实例

在您的例子中,
myArray
是类ViewController的属性。在这里,您可以使用
self.myArray
\u myArray
引用属性

self.myArray= @[@"one", @"two", @"three", @"four"];
在下面的语句中,您将创建一个包含四个字符串的数组,并将其添加到
myArray

self.myArray= @[@"one", @"two", @"three", @"four"];

你在问题中的措辞:

我知道self关键字意味着该方法将被发送到 那个消息的接收者

对于将其用作以下用途的方法调用有效:

[self aMethod];
即使在这种情况下,您也在调用作为类的一部分的方法。如果调用任何不属于当前(self)类的方法,则可以使用该类的对象名来调用它:

SomeClass *someClassObject = ...
[someClassObject itsMethod];

self
始终对应于self类。因此,类的每个实例都有自己的实例

在您的例子中,
myArray
是类ViewController的属性。在这里,您可以使用
self.myArray
\u myArray
引用属性

self.myArray= @[@"one", @"two", @"three", @"four"];
在下面的语句中,您将创建一个包含四个字符串的数组,并将其添加到
myArray

self.myArray= @[@"one", @"two", @"three", @"four"];

你在问题中的措辞:

我知道self关键字意味着该方法将被发送到 那个消息的接收者

对于将其用作以下用途的方法调用有效:

[self aMethod];
即使在这种情况下,您也在调用作为类的一部分的方法。如果调用任何不属于当前(self)类的方法,则可以使用该类的对象名来调用它:

SomeClass *someClassObject = ...
[someClassObject itsMethod];

myArray
。正如您所说,一个属性的名称。默认情况下,编译器将创建一个名为
\u myArray
的实例变量,该变量由该属性使用。在任何情况下,由于您已将属性声明为
NSArray*
(而不是只读)类型,因此可以为其分配一个数组

self
关键字只是指向“当前”对象的指针,即键入“self”时编写代码的类的某个实例。如果将某些内容分配给
self.myArray
,则进行该分配的类需要具有
myArray
属性。在代码示例中,
self
是指向刚刚加载其视图的
ViewController
的特定实例的指针。当您使用故事板编写iPhone分配时,这些都不会改变
self
始终是接收使用
self
的方法的对象。(注意:当在类方法中使用时,即以
+
开头的方法,接收该方法的对象是类本身,而不是类的实例。如果这听起来令人困惑,请不要担心——它不会经常出现。)

如果您发现像
self.myArray
这样的表达式令人困惑,那么了解属性语法只是方法调用的缩写可能会有所帮助。而且,在这样的表达中,
self
一点也不特别。语法为
foo.bar
,其中
foo
可以是任何对象指针(包括
self
),而
bar
可以是
foo
指向的对象的任何属性。表达式直接转换为
[foo bar]
[foo setBar:…]
,具体取决于您是在读取还是为属性赋值。所以

self.myArray = @[a, b, c];
与以下内容完全相同:

[self setMyArray:@[a, b, c]];

myArray
。正如您所说,一个属性的名称。默认情况下,编译器将创建一个名为
\u myArray
的实例变量,该变量由该属性使用。在任何情况下,由于您已将属性声明为
NSArray*
(而不是只读)类型,因此可以为其分配一个数组