视图控制器的 UI 元素的所有者是什么?带有 ARC 的 iOS5



我是iOS 5的新手。从Apple的文档中,我知道ARC是什么以及"对象的所有者应该使用strong符号"。看完《你好世界》,我注意到一件奇怪的事情。(我的意思是这让我感到困惑)

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?感到困惑

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

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

  • 例如,您创建的视图控制器视图或窗口控制器窗口的子视图的插座是对象之间的任意引用,并不意味着所有权。
  • 强出口通常由框架类指定(例如,UIViewControllerview 出口或NSWindowControllerwindow出口)。

最新更新