在大多数示例中,我看到 IBOutlet 的以下设置:
(Example A)
FooController.h:
@interface FooController : UIViewController {
UILabel *fooLabel;
}
@property (nonatomic, retain) IBOutlet UILabel *fooLabel;
@end
FooController.m:
@implementation FooController
@synthesize fooLabel;
@end
但这也很好(注意:没有属性也没有合成):
(Example B)
FooController.h:
@interface FooController : UIViewController {
IBOutlet UILabel *fooLabel;
}
@end
FooController.m:
@implementation FooController
@end
像示例 B 中那样定义 IBOutlet 是否有任何缺点?比如内存泄漏?似乎工作正常,我更喜欢不将 IBOutlet 公开为公共属性,因为它们不这样使用,它们仅在控制器实现中使用。在没有真正需要的情况下在三个地方定义它并不让我觉得很干燥(不要重复自己)。
在 Mac OS X 上,IBOutlet 的连接方式如下:
- 查找名为 set: 的方法。如果存在就调用它。
- 如果不存在方法,则查找名为 的实例变量,并设置它不保留.
在 iPhone 操作系统上,IBOutlet 的连接方式如下:
- 调用 [object setValue:outletValue forKey:@""]
为键设置值的行为是执行以下操作:
- 查找名为 set: 的方法。如果存在就调用它。
- 如果不存在方法,则查找名为 的实例变量,设置它并retain it.
如果你使用房产,你就会陷入“查找名为 set:... 的方法“两个平台上的情况都是如此。如果您只使用实例变量,那么在 Mac OS X 和 iPhone OS 上您将有不同的保留/释放行为。使用实例变量没有任何问题,您只需要处理这种差异在平台之间切换时的行为。
这是有关此主题的完整文档的链接。https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW6 https://developer.apple.com/library/archive/documentation/Cocoa/Conceptual/LoadingResources/CocoaNibs/CocoaNibs.html#//apple_ref/doc/uid/10000051i-CH4-SW6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)