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では、アウトレットは宣言されたプロパティとして定義する必要があります。アウトレットは、ファイルの所有者からnibファイル(またはiOSではストーリーボードシーン)のトップレベルオブジェクトまでのアウトレットを除いて、通常はweakstrongである必要があります。したがって、作成するアウトレットは、通常、デフォルトで弱くなります。理由は次のとおりです。

  • たとえば、ビューコントローラのビューのサブビューやウィンドウコントローラのウィンドウに作成するアウトレットは、所有権を意味しないオブジェクト間の任意の参照です。
  • 強力なアウトレットは、フレームワーククラス(たとえば、UIViewControllerviewアウトレット、またはNSWindowControllerwindowアウトレット)によって頻繁に指定されます。
于 2012-05-08T13:30:06.160 に答える