抱歉,我无法提供更具描述性的标题。我的问题(在查看下面的代码之后)是 statusText 是什么。它是IBOutlet还是UILabel? “@property(保留,非原子)UILabel * statusText”如何工作?该语句是否意味着statusText是属性???
感谢您的回答。如果有任何问题,请随时发表评论。
Button_FunViewController.h
@interface Button_Fun2ViewController : UIViewController {
IBOutlet UILabel *statusText;
}
@property (retain,nonatomic) UILabel *statusText;
- (IBAction)buttonPressed: (id)sender;
Button_FunViewController.m
@synthesize statusText;
- (IBAction)buttonPressed: (id)sender {
NSString *title = [sender titleForState:UIControlStateNormal];
NSString *newText = [[NSString alloc] initWithFormat:@"%@ button was pressed.", title];
statusText.text = newText;
[newText.release];
}
答案 0 :(得分:2)
IBOutlet评估为空,只是提示Interface Builder它是一个“连接”。
是的,statusText是一个属性。属性需要三个语句(在非“现代运行时”系统上) - ivar声明,@property
语句和synthesize
语句。
答案 1 :(得分:2)
statusText
是UILabel*
类型的实例变量。 IBOutlet
关键字只是使Interface Builder可以使用该实例变量。
@property
声明给定属性的访问器和/或mutator方法。它等同于声明-statusLabel
和-setStatusLabel:
方法。
您可以使用@synthesize
自动实施这些-statusLabel
和-setStatusLabel:
方法。 nonatomic
和retain
关键字定义了这些自动生成的方法的行为。
或者,您可以自己实施-statusLabel
和-setStatusLabel:
方法。
答案 2 :(得分:2)
statusText
? statusText
是代码示例中的UILabel
IBOutlet
还是UILabel
?两个
UILabel
是一种类型(指向您在GUI中使用的UILabel
组件的指针)
IBOutlet
标记Interface Builder应用程序的变量,因此它知道将其显示为Outlet。在编译期间,编译出IBOutlet,它在NSNibDeclarations.h中定义为:
#define IBOutlet
@property
(retain,nonatomic) UILabel
*statusText
如何运作?您可以手动为变量创建访问器(getter / setter),无需使用属性。您可以拥有UILabel *statusText
并手动实施您的getter / setter。
您可以通过将变量定义为@property
来使编译器声明访问器,然后使用@synthesize
在.m
文件中创建访问器,或者再次自己声明访问器(您可以覆盖)将生成的默认访问者)
您可以拥有readwrite
或readonly
属性 - 这意味着setter和getter都会生成或只有getter。
您可以使用copy
,retain
或assign
作为setter(请参阅有关树选项的内存管理的更多信息,复制/保留/分配)
还有一些其他选项,如非原子/原子,与访问前生成互斥锁和锁定变量等有关(请参阅更多about properties)
例如,如果你有变量
NSString * string;
将其定义为readwrite属性然后合成,让编译器为您生成:
@property (copy, readwrite) NSString * string
然后使用
@synthesize string;
生成如下内容:
- (NSString *) string
{
return string;
}
- (void)setString:(NSString *)str
{
NSString * copy = [str copy];
[string release];
string = copy;
}
statusText
是属性??? 是的,您将其定义为属性,如上所述。
这里涉及几个概念。 变量的定义,将其定义为Interface Builder的IBOutlet,将变量声明为属性,以便编译器为您生成getter / setter,定义getter / setter的类型,如访问方法,内存管理和锁定。
我希望这可以解释您的问题,如果您按照链接进行操作,您会发现Apple的解释,我相信这些解释非常清楚如何使用属性。
抱歉可怕的格式化......
答案 3 :(得分:0)
如果您将IBOutlet放在那里,它将允许您在界面构建器中链接该项目。
完成IBOutlet设置后,您可以打开该类的笔尖,然后选择文件所有者,然后转到检查器并将链接从“连接”选项卡拖到该对象。
然后,您可以在类的代码中对对象进行更改,它将更改链接的对象。因此,一旦将“statusText”链接到特定的UILabel,您就可以在类的代码中使用statusText.text = @"new text"
来修改项目,例如。
此外,IBAction允许您以相同的方式建立链接。您可以将连接从控件的事件拖到文件所有者,然后选择该类中具有IBAction作为返回值的任何方法。
答案 4 :(得分:0)
在您的示例中实际上有两个statusText
“事物”。有一个类型为UILabel的statusText
对象,statusText
创建了一个@synthesize
函数。当您在方法中使用statusText
时,您正在攻击对象,而不是函数。使用self.statusText
来使用属性/函数。