我是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
的。因此,默认情况下,您创建的插座通常应该很弱,因为:
- 例如,您创建的视图控制器视图或窗口控制器窗口的子视图的插座是对象之间的任意引用,并不意味着所有权。
- 强出口通常由框架类指定(例如,
UIViewController
的view
出口或NSWindowController
的window
出口)。