在 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];
}
我希望这会更好地实现您的目标:)
希望题目够用
只是对我在在线教程中看到的一段代码感到困惑。有一个泛型 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];
}
我希望这会更好地实现您的目标:)