-2

私はiOSが初めてなので、メモリ管理を理解しようとしています。

プロパティを含む .h ファイルがあり、その var をいくつかの関数で使用したいと考えています。

@property (nonatomic, retain) NSMutableArray *myArray;

次に、.m ファイルに関数 x があります。

-(void) x
{
     // How to allocate memory to the property variable  ??

     _myArray = [NSMutableArray alloc]init];
OR
     myArray= [[NSMutableAraay alloc]init]


 // what is the utility of "_" here ?
}

.h ファイルで既にキーワード Retainを使用し、func x でメモリを割り当てているため、この場合のメモリ管理方法と、メモリ管理方法について説明します。

解除方法で

-(void)dealloc
{
[myArray release];
OR
[_myArray release];
// same here whats the difference B/W 2.?
[super dealloc];
}
4

1 に答える 1

0

を使用して、バッキング インスタンス変数を設定および取得する、アクセサーと呼ばれる 2 つのメソッド@propertyを作成します。@synthesizeアクセサーは、通常のメソッド呼び出しまたはドット表記 ( self.propertyname) のいずれかを介して呼び出されます。アクセサーは、メモリ管理やその他のタスクを実行する場所を提供します。これは、 / /etc@synthesizedを使用してアクセサーである程度制御できます。の代わりにインスタンス変数の名前を使用して、プロパティがマスクするインスタンス変数に直接アクセスできます。デフォルトでは、インスタンス変数の名前は、アンダースコアが前に付いたプロパティの名前です。アンダースコアは、人々が意図せずにインスタンス変数に誤って直接アクセスするのを防ぎ、名前空間の衝突を防ぐことができます。独自のアクセサーを実装することもできます。nonatomiccopyself.propertyName

self.myArray //goes through the setter/getter of the property
_myArray     //directly accesses backing instance variable while ignoring accessors
myArray      //incorrect

バッキング インスタンス変数の名前は、 を使用して変更できることに注意してください@synthesize myPropertyName = myCoolName

使用法に関しては、ほとんどの場合、 を使用しますself.thing。例外は、カスタム セッター/ゲッター (例return _thing) であり、スタイル セッターを通過したときにオブジェクトに送信されたに対抗するためにdealloc使用する場所です。アクセサー内でアクセサーを呼び出さない理由は明らかです。望ましくない影響を防ぐためにアクセサを使用しません。[_thing release]retainretaindealloc

編集:手動参照カウントをよりよく理解するのに役立ついくつかの素晴らしいリソースがあります。

  1. Cocoa と Objective-C で参照カウントを理解する
  2. メモリ管理プログラミング ガイド (Apple から)

また、iOS 向けに開発する場合は、ARC の使用を検討してください。ARC は自動参照カウントの略です。retainコードに明示的に追加して呼び出すMRC (Manual Reference Counting) とは異なりrelease、ARC は保守的に参照カウントを処理し、適切と思われるオブジェクトを保持および解放します。ARC については、以下を参照してください。

  1. ARC への移行 (Apple から)
于 2013-02-05T07:43:17.770 に答える