1. ホーム
  2. ios

[解決済み] Objective C - アサイン、コピー、リテイン

2023-05-18 08:18:40

質問

私はObjective Cの初心者です。C言語の基本的な知識はあり、ポインタの概念も知っています。2つの基本的な質問があります。

  1. 誰か、assign,copy,retain の違いを類推して説明してくれませんか?
  2. ポインタ変数を返す関数をどのように扱うか、また、リターンポインタを介したメッセージングをどのように実行するか?

どのように解決するのですか?

ドキュメントの変更に伴い、回答を更新しました。

ドキュメント内のいくつかのガイドに情報が分散されるようになりました。以下は、必読のリストです。

この質問に対する答えは、ARC 管理アプリケーション (新しいプロジェクトの最近のデフォルト) を使用しているか、手動でのメモリ管理を強制しているかどうかに完全に依存します。

アサイン vs. ウィーク - 使う に割り当てる。 を使って、プロパティのポインタをオブジェクトのアドレスに設定し、それを保持したり、他の方法で管理することはありません。 弱い を使うと、割り当てられたオブジェクトが解放されたときに、 プロパティが自動的にnilを指すようになります。ほとんどの場合 弱い を使い、割り当て解除されたオブジェクトにアクセスしようとしないようにします(メモリアドレスへの不正なアクセス - " EXC_BAD_ACCESS ")、適切なクリーンアップを実行しない場合。

保持とコピー - 宣言されたプロパティは リテイン を使用し、他のオブジェクトがプロパティに割り当てられたり、nil に設定されたりしても、オブジェクトの参照カウントを自動的に管理します。 コピー を使って、新しく割り当てられたオブジェクトに自動的に -copy メッセージ (これは渡されたオブジェクトのコピーを作成し、そのコピーを代わりにプロパティに割り当てます。割り当てられたオブジェクトが他のオブジェクトのプロパティとして設定された後に変更されるかもしれない状況 (これは変更/変更がプロパティにも適用されることを意味します) で有用 (必須でさえあります) です。