1

我是 iOS 5 的新手。从 Apple 的文档中,我知道 ARC 是什么以及“对象的所有者应该使用strong符号”。读完“Hello World”后,我注意到一件奇怪的事情。(我的意思是这让我很困惑)

HelloWorldAppDelegate:

@interface HelloWorldAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@end

HelloWorldViewController:

#import <UIKit/UIKit.h>

@interface HelloWorldViewController : UIViewController <UITextFieldDelegate>
@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (weak, nonatomic) IBOutlet UILabel *label;
- (IBAction)changeGreeting:(id)sender;

@property (copy, nonatomic) NSString *userName;
@end

这里:

@property (weak, nonatomic) IBOutlet UITextField *textField;
@property (weak, nonatomic) IBOutlet UILabel *label;

UI 元素有weak符号,并且没有文件有strong对它们的引用。所以我很困惑what/who hold them?

4

1 回答 1

1

在我看来,您可以将 NIB/XIB 视为这些对象的所有者。你的班级都不拥有它们。请参阅资源编程指南中的“管理来自 Nib 文件的对象的生命周期”:

从实际的角度来看,在 iOS 和 OS X 中的 outlet 应该被定义为声明的属性。出口通常应该是weak,除了从文件所有者到 nib 文件中的顶级对象(或者,在 iOS 中,故事板场景)应该是strong. 因此,您创建的 Outlets 通常默认情况下应该很弱,因为:

  • 您为例如视图控制器的视图或窗口控制器的窗口的子视图创建的 Outlets 是对象之间的任意引用,并不暗示所有权。
  • 强插座通常由框架类指定(例如,UIViewController'view插座或NSWindowController'window插座)。
于 2012-05-08T13:30:06.160 回答