2

私はiPhoneSDKで良い記憶の市民になるために、少し記憶をいじっています。

しかし、私はまだ「self.something」と単に「something」の違いを理解するのに苦労しています。

私が理解している限り、「self.something」はクラスに「something」を求めることを意味しますが、私の考えには何か問題があります。例を見てみましょう:

私はメモリ解放に取り組んできました:

  1. [self.labelIBOUtlet release] ->クラッシュします
  2. [labelIBOUtlet release] ->そうではありません。

誰かが理由を教えてもらえますか?

ありがとうございました!

編集:

これは私がヘッダーファイルに設定した情報です:

@interface viewController : UIViewController {
    UILabel * labelIBOutlet ;
}

@property (nonatomic,retain) IBOutlet UILabel * labelIBOutlet ;
4

3 に答える 3

2

「プロパティ」の意味を理解する必要があります。「ドット」の使用は、変数プロパティを「設定」および「取得」するためだけに作成された「特別なメソッド」を呼び出すためのより高速な方法です。

例として、サブビューを使用する独自のクラス/UIView を持つことができます。

myView.h で

@interface myView : UIView  {
    UIWebView *webView;
}

これを行うと、「プロパティ」ではなくオブジェクトだけが表示されます...したがって、myView.mで次のように「ドット」を使用しようとします。

NSLog(@"%i", self.webView.frame.size.width);

その後、エラーが発生します。それを行うことはできません。xCode は次のように述べています。エラー: 不明な 'webView' getter メソッドにアクセスしています

つまり、メソッド「webView」が存在しないことを意味します...「self.webView」を呼び出すと、「webView」というメソッドを呼び出すだけです...このメソッドは、値へのポインターを返すだけです。そしてあなたが呼び出すとき:

self.webView=someValue;

メソッド「setWebView」を呼び出しているだけです。これは、オブジェクトにsomeValueを設定するメソッドです...

しかし、そう... これらの 2 つの目に見えないメソッドはどこから来たのでしょうか?

プロパティとして webView を使用するように指示すると、xCode 自体によって作成されます...この例では、いくつかの行を追加します。

myView.h で

    @interface myView : UIView  {
        UIWebView *webView;
    }

@property (nonatomic, retain)  UIWebView *webView;

myView.m で

@implementation myView

@synthesize webView;

// ...

このxCodeを実行すると、「webView」と「setWebView」の2つのメソッドが追加され、次を呼び出すことができます:

NSLog(@"%i", self.webView.frame.size.width);

エラーなしで...

次のように呼び出すだけで、(正しい形式の、この場合は既存の UIWebView へのポインター) 値を入れることができます。

self.webView = aUIWebView;

で「保持」を使用したため、リリースすることを忘れないでください。

@property (nonatomic, retain)  UIWebView *webView;

次のコマンドで解放します。

[webView release];
于 2011-03-06T12:40:41.467 に答える
0

オブジェクトにlabelIBOUtletが宣言されていない場合は、self.labelIBOUtletが存在しないため、呼び出しに失敗します。self==はヘッダーファイルで宣言されているオブジェクトにあります

それが明確になることを願っています

于 2011-03-06T11:34:57.953 に答える
0

実装ファイルで labelIBOutlet を @synthesize しましたか?

于 2011-03-06T12:20:17.460 に答える