每个IBOutlet都应该有财产吗?

时间:2011-08-01 10:54:18

标签: iphone ios cocoa-touch iboutlet

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

6 个答案:

答案 0 :(得分:10)

我喜欢看它在内存管理和外部访问方面的易用性。如果您需要从外部访问它,显然要创建一个属性。 (是轻松的内存管理,如果它很容易你就不会搞砸了,如果你不搞乱它就不会成为一个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.

答案 1 :(得分:4)

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

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

我希望你明白这一点。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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