問題タブ [automatic-ref-counting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - 非ARC(自動参照カウント)およびARCユーザー向けのオープンソース
Xcodeを使用したgitモジュールを介してコードを介して他のプロジェクトに配布されるオープンソースライブラリがいくつかあります。一部のプロジェクトは明示的な保持/解放を維持しますが、他のプロジェクトは自動参照カウントを活用したいと考えています。とにかく、ARCの有無にかかわらずXcodeプロジェクトで同じソースをコンパイルできるようにすることはできますか?静的ライブラリにコンパイルされた場合、それは機能しますか?
objective-c - Objective-Cオブジェクトを私が宣言したものとはまったく異なるクラスとして宣言する
私が書いたメソッドでは、クラス'A'のインスタンスを宣言し、そのインスタンスでメソッドを呼び出しています。実行時にメソッドを実行すると、アプリがクラッシュします。'A'のインスタンスを宣言したにもかかわらず、認識されないセレクターがクラス'B'のインスタンスに送信されたと表示されます。どこかでメモリを正しく管理していない可能性があるため、メソッドを別のクラスに送信していると読みましたが、ARCを使用しているので、問題はありません。助けていただければ幸いです!
呼び出されているメソッド:
objective-c - ARCでの弱参照のゼロ化
MikeAshの「ZeroingWeakReferences」の記事の私の読みが正しければ、弱い参照はassign
ARCのない参照のようなものです。ただし、参照されるオブジェクトの割り当てが解除されると、「ダングリングポインター」(割り当て解除されたオブジェクトを指すポインターを意味する)を取得する代わりに、ポインターがに設定されnil
ます。
これは正しいですか?これは、または(ARCがアクティブな場合)とマークされたプロパティで発生しますか?weak
assign
これが正しければ、これにより多くのSIGABRTが排除されます。
objective-c - カスタムdeallocとARC(Objective-C)
私の小さなiPadアプリには、オブザーバーを使用する「言語切り替え」機能があります。すべてのViewControllerは、その間に自分自身をオブザーバーに登録しますviewDidLoad:
。
ユーザーが[言語の変更]ボタンを押すと、新しい言語がモデルに保存され、オブザーバーに通知さupdateUi:
れ、登録されたオブジェクトのセレクターが呼び出されます。
これは、TabBarControllerにビューコントローラがある場合を除いて、非常にうまく機能します。これは、タブバーが読み込まれると、ビューを初期化せずに子コントローラーからタブアイコンをフェッチするため、viewDidLoad:
呼び出されないため、これらのビューコントローラーは言語変更通知を受信しません。このため、registerObject:
呼び出しをinit
メソッドに移動しました。
viewDidLoad:
オブザーバーに登録していたときは、登録viewDidUnload:
を解除していました。現在、に登録しているのでinit
、に登録を解除するのは非常に理にかなっていdealloc
ます。
しかし、ここに私の問題があります。私が書くとき:
このエラーが発生します:
ARCは、「dealloc」の明示的なメッセージ送信を禁止しています
[super dealloc]
スーパークラスが適切にクリーンアップされるように呼び出す必要がありますが、ARCはそれを禁止しているため、今は行き詰まっています。オブジェクトが死にかけているときに通知を受ける別の方法はありますか?
objective-c - ARC の下の id 配列メンバー インスタンス
私はこのようなものを書きたい:
しかし、コンパイラはそれについて不平を言います:
ARC で id 配列メンバー インスタンスを作成するにはどうすればよいですか? そして、その配列をどのように初期化しますか? mallocを使用していますか?新着[]?
大規模なライブラリを ARC に変換していて、多くの作業が発生するため、NSArray を使用したくありません。
xcode - NSViewController で設定されていない IBOutlets
だから私は次のように設定された NSViewController (MyVC) を持っています:
これで、この NSViewController を ( 経由でMyVC *vc = [[MyVC alloc] init];
) ロードしてウィンドウにロードすると、テキスト フィールドが適切に表示されます。ただし、上記の貼り付け (およびいくつかの BAD_ACCESS) が示唆するようvc.input
に、テキスト フィールドを正しく指していません。
ノート:
- このプロジェクトは ARC を実行しています。
- これは単純化や一般化ではありません。私はこの正確なコードを無駄に実行しました。
- すべての IBOutlets は間違いなく適切に設定されています。
iphone - 異なるメモリ管理ARC/ARCなし
単純なARCコードを非ARCに変換する必要があります。比較的簡単でしたが、インスタンス変数の割り当てself.var = xxxを見逃しましたが、代わりにvar=xxxと記述しました。
ARCバージョンでは問題は発生しませんでしたが、非ARCバージョンでは確かにクラッシュが発生しました。
それは、自己なしでARCでインスタンス変数を割り当てることが実際にOKであることを意味しますか?だから彼らは保持されますか?
ありがとう!
ps ARCでプログラミングする方法を学ぶのに最適な情報源は何ですか?明らかなエラーを回避します-これまでのところ、問題はまったく見つかりませんでしたが、何かを見逃した可能性があることに神経質になっています
cocoa-touch - ARC:デリゲートメソッドで使用されるブロック内からEXC_BAD_ACCESSを取得する
私は何か間違ったことをしているに違いありませんが、自動参照カウントのドキュメントはそれが何であるかについてのヒントを私に与えません。私がやっていることは、デリゲートメソッド内からブロックコールバックを使用してメソッドを呼び出すことです。ブロック内から同じデリゲートにアクセスすると、アクセスが悪くなります。問題は、渡したオブジェクト(デリゲートにメッセージを送信しているloginController)が明らかに解放されないことです。ブロック内でアクセスしないと、問題なくメソッドを複数回呼び出すことができます。これが私のコードです:
NSZombieEnabledは何もログに記録せず、gdbからの使用可能なスタックトレースはありません。私はここで何が間違っているのですか?ポインタをありがとう!
編集:
問題の範囲が広いと思いました。上記のコールバックはNSURLConnectionDelegateメソッドから呼び出されます(ブロック自体はそのデリゲートの強力なプロパティであるため、ARCはBlock_copy()を呼び出す必要があります)。このシナリオでは、特別な測定を行う必要がありますか?
フロー(loginControllerは常に表示されたままです):
loginController
デリゲートを表示
NSURLConnectionDelegate
そして、これは私が悪いアクセスを取得する場所ですが、そのloginController変数にアクセスする場合に限ります...
objective-c - 自動参照カウントの問題:非ローカルオブジェクトのアドレスを__autoreleasingパラメータに渡して書き戻す
メソッドへのポインタにポインタを渡そうとしていますが、どうやらARCにはそれを行う方法にいくつかの問題があります。ここに2つの方法があります。
次のエラーが表示されます。
自動参照カウントの問題:非ローカルオブジェクトのアドレスを__autoreleasingパラメータに渡して書き戻す
次のコマンドが表示される行: