私の意見では、クラスに余分なコードを提供しました。私は説明しようとします。
まず、以前は2種類の異なるIBOutlet
があります。私は最初のものがあなたによって追加されたと思います。
IBOutlet UISegmentedControl *disp;
ドラッグアンドドロップ操作を行ったときに、もう1つがXcodeによって追加されました。
@property (retain, nonatomic) IBOutlet UISegmentedControl *displaySlider;
まず考慮
用語IBOutlet
はXcodeのための唯一のプレースホルダです。これにより、Xcodeはインスタンス変数をグラフィカル要素に接続するのに役立ちます。
私はアウトレット接続を使用するとき、通常は@property (retain, nonatomic) IBOutlet UISegmentedControl *displaySlider;
(Xcodeのように)のアクセサを提供します。そうしないと、メモリリークの問題が発生する可能性があります。
第考慮は
設けられたコードXcodeは右です。ドラッグ操作をしたときには、displayController
インスタンス変数とグラフィカル要素をリンクしました。この接続のバランスをとるために、そのインスタンス変数は次のようにdeallocメソッドで解放する必要があります:メモリの警告状況でviewDidUnload
メソッドが呼び出される可能性があるため
中毒で
[displayController release];
、Xcodeは[self setDisplaySlider:nil];
を追加しました。コントローラーが再びメモリーにロードされると、アウトレット接続が復元されるため、ここでは問題ありません。
Advanced Memory Management docとrelease-or-set-to-nil-retained-membersでは、2つのメソッド呼び出しの違いを読み取ることができます。
[self setDisplaySlider:nil]; // or self.displaySlider = nil;
あなたはそのためにアクセサ(この場合はセッターメソッド)にアクセス:
[displayController release];
あなたがこれを行う場合しているときに、あなたのインスタンス変数がdisplayController
と呼ばれる直接アクセス:あなたがこれを行う場合がありますインスタンス変数。それは同じではありません(私が提供したコードを見て混乱を避けるために)。
だから、これは私が使用するコードです(私はあなたを導くためにいくつかのコメントを追加しました):
//.h
@interface ViewController : UIViewController
{
UISegmentedControl *disp; // instance variable called disp
// (A) now this is no longer necessary, new compile mechanism will create an instance
// variable called _displaySlider under the hood
}
@property (retain, nonatomic) IBOutlet UISegmentedControl *displaySlider;
@end
//.m
@synthesize displaySlider = disp; // I say to Xcode to create a setter and a getter to access the instance variable called disp as written in @property directive
// no longer necessary for (A)
- (void)viewDidUnload
{
[super viewDidUnload];
[self setDisplaySlider:nil]; // I call the setter method to release the UISegmentedControl
}
- (void)dealloc {
[disp release]; // I release the UISegmentedControl directly
// if you choose the (A) mechanism simply do
// [_displaySlider release];
[super dealloc];
}
はそれがお役に立てば幸いです。
にドラッグアンドドロップすると自動的に生成されるコードです。XCodeが慣れ親しんだものとは異なるコードを生成するようです。 @propertyの付いていないラベルでも、nilに設定してリリースします。私はそれが必要ではないと思った – Vikings