gpt4 book ai didi

iphone - IBOutlet 是否需要是一个属性并被合成?

转载 作者:行者123 更新时间:2023-12-03 18:10:47 27 4
gpt4 key购买 nike

在大多数示例中,我看到 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 公开为公共(public)属性,因为它们不这样使用,它们仅在 Controller 实现中使用。在没有真正需要的情况下在三个地方定义它并不让我觉得非常 DRY(不要重复自己)。

最佳答案

在 Mac OS X 上,IBOutlet 的连接方式如下:

  1. 查找名为 set : 的方法。如果存在,请调用它。
  2. 如果不存在方法,则查找名为 的实例变量,将其 设置为不保留

在 iPhone 操作系统上,IBOutlet 的连接方式如下:

  1. 调用 [object setValue:outletValue forKey:@" "]

为键设置值的行为是执行以下操作:

  1. 查找名为 set : 的方法。如果存在,请调用它。
  2. 如果不存在方法,则查找名为 的实例变量,设置它并 保留它。

如果您使用属性,您将陷入“在两个平台上查找名为 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

关于iphone - IBOutlet 是否需要是一个属性并被合成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1221516/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com