gpt4 book ai didi

iOS 5.1 : IBOutlet instance variables & @property declarations

转载 作者:可可西里 更新时间:2023-11-01 05:42:17 26 4
gpt4 key购买 nike

在创建自定义 iOS 表格 View 单元格时,我创建了一个新的 .xib 文件,在界面生成器中拖放了一些 UI 元素,我的 .h 文件看起来像这样......

#import <UIKit/UIKit.h>

@interface MasterTableViewCell : UITableViewCell
{
IBOutlet UILabel *cellLabel;
IBOutlet UIImage *cellImage;
}

@property (nonatomic, retain) IBOutlet UILabel *cellLabel;
@property (nonatomic, retain) IBOutlet UIImage *cellImage;

@end

在一些博客上,我看到缺少实例变量。什么时候需要声明实例变量?特定 UI 对象不需要实例变量和@property 声明。此外,我正在使用自动引用计数创建应用程序,因此垃圾收集需求也不存在。这对实例变量和属性的使用有何不同?

最佳答案

iOS 中没有垃圾回收。 iOS 使用引用计数来跟踪对象的所有权。使用 ARC 并没有消除引用计数,但编译器负责释放和保留对象。使用 ARC 时,不允许向对象发送保留、释放或自动释放消息,也不允许在 dealloc 方法中调用 [super dealloc]。在上面的代码中,由于您使用的是 ARC,因此应将“保留”属性替换为“强”属性。

当您在实现中使用@property 和相应的@synthesize 时,您不需要创建支持实例变量——编译器会为您完成。 @property 和@synthesize 一起创建访问器方法(getter 和setter),还使您能够使用点表示法来引用对象的属性。如果您愿意,您仍然可以编写自己的访问器方法。

上面的代码可以替换成下面的:

#import <UIKit/UIKit.h>

@interface MasterTableViewCell : UITableViewCell

@property (nonatomic, strong) IBOutlet UILabel *cellLabel;
@property (nonatomic, strong) IBOutlet UIImage *cellImage;

@end

在您的实现文件中,您将拥有:

#import "MasterTableViewCell.h"

@implementation MasterTableViewCell

@synthesize cellLabel;
@synthesize cellImage;

@synthesize cellLabel, cellImage;

... remainder of your code

在您的代码中,为确保您使用的是访问器方法,请使用“self”来引用您的属性:

self.cellLabel.text = @"some text";

[[self cellLabel] setText:@"some text"];

我希望这有助于澄清一些事情。

关于iOS 5.1 : IBOutlet instance variables & @property declarations,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10274323/

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