在 viewDidLoad 之外使用分配和初始化的对象?

Using an allocated and initialised object outside of viewDidLoad?

希望题目够用

只是对我在在线教程中看到的一段代码感到困惑。有一个泛型 ZHEDog class,其中声明了属性、方法等。从这个 class 我们创建了几个实例 - firstDog、secondDog、fourthDog 等等。

现在,当我们创建每个实例时,我们在主(一个)视图控制器的 viewDidLoad 方法中使用以下行:

ZHEDog *fourthDog = [[ZHEDog alloc] init];

然后我们在这一行之后设置它的一些属性,如名称等。

所以我们在视图控制器的 viewDidLoad 中创建了这个实例,到目前为止还没有子class通用 ZHEDog class,所以它都是从 class 派生的文件。

现在,我感到困惑的是,显然我无法在另一种方法(viewDidLoad 除外)中设置此实例的 属性,所以我不能说:

-(void) printHelloWorld
{
fourthDog.name = "something new";
}

有点道理,但我无法解释原因。我本以为一旦实例被分配和初始化,我就可以在必要时更改它的属性?但是相同的范围规则是否适用于 viewDidLoad?

使用属性,它们就像实例变量,可以在 class

的实例中随处访问
@property ZHEDog *firstDog, *fourthDog;

然后在viewDidLoad

中实例化它们
self.firstDog = [[ZHEDog alloc] init];
self.fourthDog = [[ZHEDog alloc] init];

并在方法中更改它们

-(void) printHelloWorld
{
self.firstDog.name = "woof";       
self.fourthDog.name = "something new";
}

@vadian 的内容是正确的,但使用属性也允许其他 类 看到此变量。假设您导入了头文件并且它包含 @property ZHEDog *firstDog, *fourthDog;。这些变量变为 public。除非它们在植入文件中。

但其他方法是像这样创建变量:

头文件

@interface ViewController : UIViewController {
    ZHEDog *firstDog, *fourthDog;

}

@end

除了 ViewController,现在所有值都是私有的或排他的。因此不允许其他人使用或查看这些变量。并访问函数中的变量 printHelloWorld:

- (void)printHelloWorld {
    firstDog.name = @"woof";       
    fourthDog.name = @"something new";

}

正在分配

- (void)viewDidLoad {
    //new is the combination of alloc and init. only use +new when using alloc and init, not alloc and initWith...
    firstDog = [ZHEDog new];
    fourthDog = [ZHEDog new];

}

我希望这会更好地实现您的目标:)