首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >每个IBOutlet都应该有一个属性吗?

每个IBOutlet都应该有一个属性吗?
EN

Stack Overflow用户
提问于 2011-08-01 10:54:17
回答 6查看 1.5K关注 0票数 4

我们为变量创建属性,以便在其他视图中使用它。我们对IBOutlets也是这样。但不一定是为了利用它们。是否需要为我们刚刚创建的每个IBOutlet创建xib属性?抑或这只是一种良好的做法?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-08-01 11:27:39

我喜欢从便于内存管理和外部访问的角度来看待它。如果您需要从外部访问它,显然要创建一个属性。(是的,轻松的内存管理,如果很容易,你不会搞砸它,如果你不把它搞砸了,它以后不会变成一个bug )

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

由于这个原因,我通常使用@property (赋值)来表示我不会更改的属性,而@property (retain)则用于其他所有内容,并且不会直接将IBOutlets声明为ivars。

示例:

代码语言:javascript
运行
复制
@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.
票数 10
EN

Stack Overflow用户

发布于 2011-08-01 11:00:18

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

具体来说,如果您只从声明它的类访问出口,则严格地不需要该属性。如果您有一个属性,您将得到属性所提供的优势,但您始终可以直接引用该出口。

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

票数 4
EN

Stack Overflow用户

发布于 2011-08-01 11:00:34

如果您只想对创建XIB的视图使用IBOutlet,那么就不需要在这里设置属性。但是,是的,每次我们为视图创建IBOutlet时使用它是很好的实践,但不是强制性的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6897414

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档