4

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

4

6 回答 6

10

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

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.
于 2011-08-01T11:27:39.130 回答
4

不必为每个IBOutlet.

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

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

于 2011-08-01T11:00:18.477 回答
1

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

于 2011-08-01T11:00:34.873 回答
0

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

例如,在您有标签和文本字段的屏幕中,标签始终具有字符串“名称:”并且文本字段用于从用户那里获取输入,您只需为文本字段创建一个引用出口即可访问数据来自用户的输入。在这里为标签创建引用出口没有任何意义。

我希望你明白这一点。

于 2011-08-01T10:57:31.550 回答
0

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

于 2011-08-01T11:08:03.223 回答
0

如果要更改显示的内容,则应添加属性..例如,如果我们要更改标签文本,则需要使用 IBOutlet nd 属性,以便我们能够访问标签控件该框架将从我们的笔尖构建..

于 2011-08-01T11:37:15.717 回答