繁体   English   中英

每个IBOutlet都应该有财产吗?

[英]Should every IBOutlet have a property?

我们为变量创建属性 ,以便在其他视图中使用它。 我们对IBOutlets也一样 但并不总是使用它们。 是否有必要为我们创建的每个IBOutlet创建属性我们的xib? 或者这只是一个好习惯吗?

我喜欢看它在内存管理和外部访问方面的易用性。 如果您需要从外部访问它,显然要创建一个属性。 (是否易于内存管理,如果很容易就不会搞砸了,如果你不搞乱它就不会成为一个bug)

80%的时间我的视图控制器都有IBOutlets,没有其他人访问它们,因此ivars工作。 问题是,当您不使用@property时, 仍会保留指定的值。 然后你需要记住发布它,即使你没有自己保留它,我觉得这是违反直觉的。

出于这个原因,我通常使用@property(assign)作为我不会改变的那些,并且@property(保留)用于其他所有内容,并且永远不会将IBOutlets直接声明为ivars。

例:

@interface something : NSObject {
    //This one needs to be RELEASED then set to nil in both viewDidUnload, and dealloc.
    IBOutlet UILabel * myLabel;
    //also cannot be accessed outside of "something" class (technically it can, but don't do that)
    //I NEVER declare my outlets this way.
}

//This one can just be set to nil in viewDidUnload and dealloc
@property (nonatomic, retain) UILabel * myOtherLabel;
//it can also be accessed from mySomething.myOtherLabel by any other class.

//This one just works. I don't own it, the view owns it, so I don't retain/release.
@property (nonatomic, assign) UILabel * myOtherOtherLabel;
//It also provides access to outsiders.
//I wouldn't recommend using this type if you want to change the value though.

没有必要为每个IBOutlet创建属性。

具体来说,如果仅从声明它的类访问插座,则不需要严格要求该属性。 如果您拥有房产,您将获得房产提供的优势,但您可以直接直接参考房屋。

如果您打算从另一个类访问该出口,那么属性是有用的,因此您不必定义自己的setter和getter方法。

如果您只想将IBOutlet用于您为其创建XIB的视图,则无需在此处设置该属性。 但是,在我们为视图创建IBOutlet时,使用但不强制使用是一种好的做法。

如果您要显示的内容不会更改,则可以跳过为该窗口小部件创建属性或IBOutlet。

例如,在具有标签和文本字段的屏幕中,标签始终具有字符串“Name:”并且textfield用于从用户获取输入,您必须为文本字段创建引用插座以访问数据来自用户的输入。 为标签创建引用插座在这里没有任何意义。

我希望你明白这一点。

属性是Objective-C中的一项功能,它允许我们自动生成访问器,还有一些其他的附带好处。 所以Praveen S给你一个Label和UIText的例子我只是很少探索。 假设您与UILabel无关,您不需要设置正确的但如果要求用户向您的UITextField提供一些文本,则必须设置属性。 如果使用retain设置属性,则必须在viewDidUnload中释放它。

如果你想更改显示内容,那么你应该添加属性..例如,如果我们想要更改标签文本,那么我们需要使用IBOutlet和属性,这样我们就需要能够获得标签控件框架将从我们的笔尖构建..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM