Objective C的实例变量,为什么我应该声明它们?

我很难理解为什么我需要声明实例变量。让我解释一下我的意思..Objective C的实例变量,为什么我应该声明它们?

例如..

@interface LearningViewController : UIViewController { 

UILabel *myText; // <--- Instance Variables

}

@property (nonatomic,retain) IBOutlet UILabel *myText;

-(IBAction)method:(id)sender;

@end

这也可以作为做

@interface LearningViewController : UIViewController { 

//instance variables go here, but are not declared, I just leave this field blank

}

@property (nonatomic,retain) IBOutlet UILabel *myText;

-(IBAction)method:(id)sender;

@end

,你可以看到。在后者的例子中,我只建造了setter/getter为UILabel * myText

但在前者中我也声明了实例变量。

双方最终在年底工作

@implementation LearningViewController 

@synthesize myText;

-(IBAction)method:(id)sender {

[myText setText:@"hey"];

//or

NSString *myObject = [[NSString alloc]initWithString:@"hey"];

[myText setText:myObject];

}

现在这两件事产生相同的结果。所以我的问题是,为什么?这样做的好处是什么? 我为什么要建立和反对

NSString *myObject = [[NSString alloc]initWithString:@"hey"]; 

myText.text = myObject;

时,我可以做

[myText setText:@"hey"]; 

在此先感谢。

回答:

正如你的代码演示的那样,你在技术上不需要声明实例变量,大多数情况下需要

一个关键的例外是,当您编译旧的(< 4.0)iOS运行时,以及可能使用GCC的32位Mac OS X运行时,它不支持综合实例变量。另外,如果你想为后面增加的实例变量保留空间(如果你正在生成一个框架,并期望在稍后的时间点扩展一个类,可以是相关的),你需要显式声明实例变量。

编辑:长话短说:传统,可移植性和可扩展性关切禁止明确的ivars。对于目标为10.6,尤其是10.7的应用程序,很少或根本不需要声明它们。

回答:

在问题的第二部分,您只是简单地使用点符号。你可以设置你的myText.text等于@“嘿”,就像你在第二个例子中那样。

[myText setText:@"hey"]; 

是同义

myText.text = @"hey"; 

你并不需要声明一个NSString可以提前把你的价值。

回答:

最初Objective-C没有属性,@ synthesize不存在。您必须声明您的iVar(实例变量)并编写您自己的setters和getters。

当语言和运行时修改为包含属性和@synthesize时,情况会更好。你不再需要编写你的setter和getters。但是你仍然必须申报你的iVar。

后来,语言和运行时间演变得更多,今天,你甚至不需要声明你的iVar。 (虽然我倾向于写@synthesize example = _example;所以我可以控制生成的iVar命名的内容。)

这是一项新功能,只支持相对最新版本的运行时。与旧版本的OSX不同,iOS版本不支持4.x版本。

如果您正在为今天和未来的软件,来吧,让他们出去,如果YOT需要传统支持,让他们进来。

回答:

你可以离开的ivars出来,但我不同意让出高德。 OOP中的.h文件通常是一个显示所有变量和方法的头文件。它宣布它们。假设将来你想看看这个类是干什么的,你只需引用.h文件即可。或者假设其他人需要查看该类,或者使用该类与他的代码进行通信。它使得查看变量更容易,查看什么是声明的,什么不是。也就是说,如果你想专业编程。

现在这取决于你想要做什么。你将创建一个对象的原因是,所以你可以在稍后发布它。所以你继续使用它,当你完成后,你就完成了使用它。现在,当仅仅在一种方法中使用实例变量时,为整个类创建实例变量不是一个好的设计决策。从某种意义上讲,整个班级存储变量的意义不大,实际上它只用于一种方法。在这种情况下,您应该只使用该方法创建该对象,并在完成后立即发布该对象。

现在有时做

[myText [email protected]"hello"];

作品。这真的取决于你的代码。我想,真正了解情况差异的唯一方法就是练习。有时您需要将标签设置为另一个对象,从而创建一个对象。否则,它会得到autoreleased等...

无论如何,基本上,使用实例变量仅适用于要在全球范围内使用的变量。和UI元素当然(因为它们被整个类和接口构建器使用)。

希望这会有所帮助。

回答:

此外,有时您想在课堂中使用受保护的或私人的iVar,而不是使用其中的某个属性。 (例如,当您不希望允许iVar访问除此类(私有)或其后代(受保护)的实例以外的任何内容。标头中声明的属性可用于任何可“看见”目标对象在信头中自动声明ivars作为属性(有或没有大括号内的声明)可能从信息隐藏的角度来看是不好的

你也可以在你的.m文件中添加一个实现部分:any你申明的属性将会是私有的,这个好处显然是在隐藏信息的地方,以及使用点符号的能力。

以上是 Objective C的实例变量,为什么我应该声明它们? 的全部内容, 来源链接: utcz.com/qa/262461.html

回到顶部