gpt4 book ai didi

ios - 使用 self 关键字时的困惑

转载 作者:行者123 更新时间:2023-11-28 20:01:35 26 4
gpt4 key购买 nike

我对这段代码有几个问题:

#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 关键字时 Storyboard都会让我感到困惑,我不知道接收者是哪个对象第二个问题,我知道 @[@"object", @"object"]; 是创建 NSArray 对象的快速方法,但是“myArray”是一个属性,不是 NSArray 对象。请解释一下,谢谢。

最佳答案

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

self 关键字只是指向“当前”对象的指针,当您键入“self”时,您正在为其编写代码的类的某个实例。如果您将某些内容分配给 self.myArray,您在其中进行分配的类需要具有 myArray 属性。在您的代码示例中, self 是指向刚刚加载其 View 的 ViewController 的特定实例的指针。当您使用 Storyboard编写 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]];

关于ios - 使用 self 关键字时的困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23779812/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com