【问题标题】:What is the owner of UI elements of a view controller? iOS5 with ARC视图控制器的 UI 元素的所有者是什么? iOS5 带 ARC
【发布时间】:2012-05-16 23:08:36
【问题描述】:

我是 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?

【问题讨论】:

    标签: iphone ios memory-management ios5 automatic-ref-counting


    【解决方案1】:

    在我看来,您可以将 NIB/XIB 视为这些对象的所有者。你的班级都不拥有它们。请参阅资源编程指南中的"Managing the Lifetimes of Objects from Nib Files"

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2017-04-26
      • 2012-11-26
      • 1970-01-01
      • 2012-08-30
      • 1970-01-01
      相关资源
      最近更新 更多