我们为变量创建属性,以便在其他视图中使用它。我们对IBOutlets也是如此。但并不总是使用它们。是否有必要为我们刚刚创建 xib 的每个 IBOutlet 创建属性?还是这样做只是一个好习惯?
6 回答
我喜欢从易于管理的内存和外部访问方面来看待它。如果您需要从外部访问它,显然要创建一个属性。(是的,内存管理很容易,如果它很容易,你就不会搞砸,如果你不搞砸,以后就不会成为错误)
80% 的时间我的视图控制器都有 IBOutlets 并且没有其他人访问它们,因此 ivars 工作。问题是当您不使用@property 时,分配的值仍然保留。然后你需要记住释放它,即使你自己没有保留它,我发现这违反直觉。
出于这个原因,我通常将@property(分配)用于我不会更改的那些,并将@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。
例如,在您有标签和文本字段的屏幕中,标签始终具有字符串“名称:”并且文本字段用于从用户那里获取输入,您只需为文本字段创建一个引用出口即可访问数据来自用户的输入。在这里为标签创建引用出口没有任何意义。
我希望你明白这一点。
属性是 Objective-C 中的一个特性,它允许我们自动生成访问器,并且还有一些其他的好处。因此,正如 Praveen S 给您的 Label 和 UIText 示例一样,我只是很少探索。假设您与 UILabel 无关,您并不完全需要设置属性,但如果要求用户向您的 UITextField 提供一些文本,则必须设置属性。如果你用retain设置属性,你必须在viewDidUnload中释放它。
如果要更改显示的内容,则应添加属性..例如,如果我们要更改标签文本,则需要使用 IBOutlet nd 属性,以便我们能够访问标签控件该框架将从我们的笔尖构建..