我们为变量创建属性,以便在其他视图中使用它。我们对 IBOutlets 也一样。但并不总是使用它们。是否有必要为我们创建的每个IBOutlet创建属性我们的xib?或者这只是一个好习惯吗?
答案 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和属性,以便我们需要能够到达框架将从我们的笔尖构建的标签控件..