我们为变量创建属性,以便在其他视图中使用它。我们对IBOutlets也是这样。但不一定是为了利用它们。是否需要为我们刚刚创建的每个IBOutlet创建xib属性?抑或这只是一种良好的做法?
发布于 2011-08-01 11:27:39
我喜欢从便于内存管理和外部访问的角度来看待它。如果您需要从外部访问它,显然要创建一个属性。(是的,轻松的内存管理,如果很容易,你不会搞砸它,如果你不把它搞砸了,它以后不会变成一个bug )
80%的时间,我的视图控制器有IBOutlets,没有其他人访问他们,因此象牙工作。问题是,当您不使用@property时,赋值仍然保留。然后你需要记得发布它,即使你自己没有保留它,这是我发现的违反直觉的。
由于这个原因,我通常使用@property (赋值)来表示我不会更改的属性,而@property (retain)则用于其他所有内容,并且不会直接将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-01 11:00:18
没有必要为每个IBOutlet创建一个属性。
具体来说,如果您只从声明它的类访问出口,则严格地不需要该属性。如果您有一个属性,您将得到属性所提供的优势,但您始终可以直接引用该出口。
如果计划从另一个类访问出口,则属性非常有用,因此不必定义自己的setter和getter方法。
发布于 2011-08-01 11:00:34
如果您只想对创建XIB的视图使用IBOutlet,那么就不需要在这里设置属性。但是,是的,每次我们为视图创建IBOutlet时使用它是很好的实践,但不是强制性的。
https://stackoverflow.com/questions/6897414
复制相似问题