タグ付けされた質問 「automatic-ref-counting」

自動参照カウント(ARC)は、Objective-CおよびSwiftオブジェクトの自動メモリ管理を提供するコンパイラー機能です。

7
このブロックで自己を強くキャプチャすると、保持サイクルにつながる可能性があります
xcodeでこの警告を回避するにはどうすればよいですか。これがコードスニペットです。 [player(AVPlayer object) addPeriodicTimeObserverForInterval:CMTimeMakeWithSeconds(0.1, 100) queue:nil usingBlock:^(CMTime time) { current+=1; if(current==60) { min+=(current/60); current = 0; } [timerDisp(UILabel) setText:[NSString stringWithFormat:@"%02d:%02d",min,current]];///warning occurs in this line }];

6
新しい自動参照カウントメカニズムはどのように機能しますか?
誰かがARCのしくみを簡単に説明できますか?ガベージコレクションとは違うことは知っていますが、どういう仕組みになっているのか正確に疑問に思っていました。 また、ARCがパフォーマンスを妨げることなくGCを実行する場合、JavaはなぜGCを使用するのでしょうか。なぜARCも使用しないのですか?

7
ARCで@autoreleasepoolがまだ必要なのはなぜですか?
ほとんどの場合、ARC(自動参照カウント)では、Objective-Cオブジェクトでのメモリ管理について考える必要はまったくありません。NSAutoreleasePoolsの作成は許可されなくなりましたが、新しい構文があります。 @autoreleasepool { … } 私の質問は、手動でリリース/オートリリースすることになっていないのに、なぜこれが必要になるのでしょうか? 編集:私がすべての回答とコメントから得たものを簡潔に要約すると: 新しい構文: @autoreleasepool { … } は新しい構文です NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; … [pool drain]; さらに重要なことには: ARCはも使用autoreleaseしますrelease。 そのためには、自動解放プールが必要です。 ARCは自動リリースプールを作成しません。しかしながら: すべてのCocoaアプリのメインスレッドには、すでに自動解放プールが含まれています。 次の2つの場合に利用できます@autoreleasepool。 セカンダリスレッドで自動解放プールがない場合は、などのリークを防ぐために独自に作成する必要がありますmyRunLoop(…) { @autoreleasepool { … } return success; }。 @mattjgallowayが彼の答えで示したように、よりローカルなプールを作成したい場合。

4
一部のファイルの自動参照カウントを無効にする
iOS 5 SDKをダウンロードしましたが、ARCは新しいAppleコンパイラの優れた機能であることがわかりました。当面の間、多くのサードパーティフレームワークはARCをサポートしていません。新しいコードにARCを使用して、現在の保持/リリースコードを変更せずに維持できますか?JSONKitなどの一部のフレームワークは、コンバーターを使用してARCに変換できないため、ARCコンバーターはここでは機能しません。 編集: 答えは、-fno-objc-arcARCを必要としないファイルのコンパイラフラグに追加することです。Xcode 4では、ターゲット->ビルドフェーズ->ソースのコンパイルでこれを行うことができます。



3
ARCとブリッジキャスト
ARCでは、にキャストできなくなりましCGColorRefたid。私はブリッジキャストをする必要があることを学びました。clang docsによると: ブリッジ・キャスト Cスタイルのキャストは、3つのキーワードの一つでアノテートされています。 (__bridge T) opオペランドを宛先の型にキャストしますT。T が保持可能なオブジェクトポインタ型の場合、保持op不可能なポインタ型でなければなりません。もしT非保持可能ポインタ型である場合、opは保持できるオブジェクトのポインタ型を持っている必要があります。それ以外の場合、キャストは不正です。所有権の譲渡はなく、ARCは保持操作を挿入しません。 (__bridge_retained T) op保持可能なオブジェクトポインタ型である必要があるオペランドを、保持不可能なポインタ型である宛先型にキャストします。ARCはローカル値の通常の最適化に従って値を保持し、受信者はその+1のバランスを取る責任があります。 (__bridge_transfer T) op保持不可能なポインタ型でなければならないオペランドを、保持可能なオブジェクトポインタ型でなければならない宛先型にキャストします。ARCは、ローカル値の通常の最適化に従って、囲んでいる完全式の終わりに値を解放します。 これらのキャストは、ARC制御の内外にオブジェクトを転送するために必要です。保持可能なオブジェクトポインターの変換に関するセクションの理論的根拠を参照してください。 __bridge_retainedまたは__bridge_transferキャストを使用して、ARCに不均衡な保持または解放をそれぞれ放出するように説得することは、不適切な形式です。 それぞれどのような状況で使用しますか? 例えば、CAGradientLayer持ちcolorsの配列プロパティ受け付けるCGColorRef秒。私は__brigeここで使用するべきだと思いますが、正確になぜすべきか(すべきでないか)は明確ではありません。

7
ARCが有効なコードで「このブロックで[オブジェクト]を強くキャプチャすると保持サイクルが発生する可能性が高い」という警告を修正
ARCが有効なコードで、ブロックベースのAPIを使用しているときに、保持サイクルの可能性に関する警告を修正するにはどうすればよいですか? 警告: Capturing 'request' strongly in this block is likely to lead to a retain cycle このコードスニペットによって生成されます。 ASIHTTPRequest *request = [[ASIHTTPRequest alloc] initWithURL:... [request setCompletionBlock:^{ NSDictionary *jsonDictionary = [[CJSONDeserializer deserializer] deserialize:request.rawResponseData error:nil]; // ... }]; 警告はrequest、ブロック内のオブジェクトの使用に関連しています。

5
iOS5 SDKの自動参照カウントに関するいくつかの質問
現在、iPad用のアプリを開発しています。開発はiOS 4.2で開始され、現在iOS 4.3で継続中です(完了する予定です)。iOS 5のARCについて読んだところ、基本的に、オブジェクトを解放して保持する必要がなくなることを理解しました。私の質問は: 私はiOSの5にアップグレードすることを決定した場合、私はすべて削除する必要があります[myObject retain]し、[myObject release]私のコードからのステートメントを? ARCを使用してiOS 5用の新しいアプリを開発する場合、何らかの「レトロ互換性」チェックを実装する必要がありますか?つまり、iOSのバージョンを確認し、それに応じて保持と解放を呼び出す必要がありますか?基本的に、ARCはすべてのiOSバージョンで利用できますか、それともiOS 5だけで利用できますか?

2
ARCを使用する場合、deallocでプロパティをnilに設定しますか?
私はiOS 5で自動参照カウントを学習しようとしています。これで、この質問の最初の部分は簡単になるはずです。 ARCを使用するときに、deallocに明示的なrelease-propertyステートメントを記述する必要がないことは正しいですか?言い換えれば、以下は明示的な割り当て解除を必要としないというのは本当ですか? @interface MyClass : NSObject @property (strong, nonatomic) NSObject* myProperty; @end @implementation MyClass @synthesize myProperty; @end 次に重要な質問は、ARCへの移行に関するリリースノートドキュメントの次の行にあります。 インスタンス変数を解放する必要はありません(実際に解放することはできません)が、ARCを使用してコンパイルされていないシステムクラスやその他のコードで[self setDelegate:nil]を呼び出す必要がある場合があります。 これは疑問を投げかけます:どのシステムクラスがARCでコンパイルされていないかをどうやって知るのですか?独自のdeallocを作成し、強く保持するプロパティを明示的にnilに設定する必要があるのはいつですか?プロパティで使用されるすべてのNSおよびUIフレームワーククラスが明示的な割り当て解除を必要とすると想定する必要がありますか? SOやその他の場所では、手動参照追跡を使用するときにプロパティのバッキングivarを解放する方法について豊富な情報がありますが、ARCを使用するときの情報は比較的少ないです。

1
ここで「インスタンスメッセージのレシーバータイプ 'CALayer'は転送宣言です」とはどういう意味ですか?
コードのブロックをiOS4プロジェクトからiOS5に移植していますが、ARCで問題が発生しています。このコードは、画面キャプチャーからPDFを生成します。 PDF生成コード UIView *captureView; ... NSMutableData *pdfData = [NSMutableData data]; UIGraphicsBeginPDFContextToData(pdfData, captureView.bounds, nil); UIGraphicsBeginPDFPage(); CGContextRef pdfContext = UIGraphicsGetCurrentContext(); [captureView.layer renderInContext:pdfContext]; UIGraphicsEndPDFContext(); renderInContext行 [captureView.layer renderInContext:pdfContext]; 次のエラーを生成します。 Automatic Reference Counting issue Receiver type 'CALayer' for instance message is a forward declaration ここで何が起こっているのでしょうか?

3
ARCで__autoreleasing所有者修飾子を記述する必要があるのはどのような場合ですか?
パズルを完成させようとしています。 __strongNSObject、NSStringなどのすべてのObjective-C保持可能オブジェクトポインタのデフォルトです。これは強力な参照です。ARC -releaseは、スコープの最後でa とバランスをとります。 __unsafe_unretained古い方法に等しい。保持可能なオブジェクトを保持せずに弱いポインターに使用されます。 __weak以下のようなものです__unsafe_unretained、それはポインタが参照されるオブジェクトが割り当て解除されるとすぐにnilに設定されることをオートゼロ弱参照の意味だことを除いて。これにより、ダングリングポインターやEXC_BAD_ACCESSエラーの危険性がなくなります。 しかし、正確には何が__autoreleasing良いのでしょうか?この修飾子を使用する必要がある場合の実用的な例を見つけるのに苦労しています。私はそれが次のようなポインターポインターを期待する関数とメソッドのためだけであると私は信じています: - (BOOL)save:(NSError**); または NSError *error = nil; [database save:&error]; ARCでは、次のように宣言する必要があります。 - (BOOL)save:(NSError* __autoreleasing *); しかし、これは曖昧すぎるため、その理由を完全に理解したいと思います。私が見つけたコードスニペットは、2つの星の間に__autoreleasingを配置しています。タイプはNSError**(NSErrorへのポインターポインター)なので、__autoreleasing単純に前ではなく星の間に配置するのはNSError**なぜですか? また、私が頼らなければならない他の状況があるかもしれません__autoreleasing。

6
iOS5の強力なストレージと弱いストレージの説明
私はiOS5開発が初めてで、objective-cを使用しています。強力なストレージと弱いストレージの違いを理解できません。ドキュメントと他のSOの質問を読みましたが、それらはすべて私と同じように聞こえ、それ以上の洞察はありません。 私はドキュメントを読みます:ARCへの移行 -iOS4の保持、割り当て、およびリリースの用語を参照しています。これは私を混乱させます。次に、Open U CS193pを調べます。OpenとCS193pは、強弱を区別します。 強:「これ以上指さないようになるまでヒープ内に保持する」 弱:「他の誰かが強く指さしている限り、これを保持する」 2つの定義は同じではありませんか?ポインターがオブジェクトを指していない場合、オブジェクトを保持しているメモリを解放しますか?ポインタ、ヒープ、メモリの割り当てまたは割り当て解除の概念を理解していますが、強いと弱いの違いは何ですか?

6
ARCにするか、ARCしないか?長所と短所は何ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 6年前休業。 この質問を改善する 私が現在取り組んでいるプロジェクトのコードの大部分はiOS 5.0より前に記述されているため、まだARCを使用していません。 私はただ疑問に思っていましたが、手動で保持/解放しないことの便利さ(そして結果としておそらくより信頼性の高いコードですか?)は、ARCを使用することの「コスト」を上回りますか?ARCについてどのような経験がありますか。それをお勧めしますか? そう: ARCはプロジェクトにどのくらいのメリットをもたらしますか? ARCにはJavaのガベージコレクションのようなコストがありますか? ARCを使用していますか。使用している場合、それをどのように見つけましたか?

3
ポップオーバーがまだ表示されているときにUIPopovercontroller deallocに達した
私は私の質問に対してSOで回答を探しましたが、どれも役に立たなかったことを保証します。ここで私はUIImagePickerController内に提示する必要がある単純なコードを取得しましたUIPopoverController: -(void)takePicture:(id)sender{ UIImagePickerController *picker=[[UIImagePickerController alloc] init]; picker.delegate=self; picker.sourceType=UIImagePickerControllerSourceTypeCamera; picker.allowsEditing=YES; UIPopoverController *poc=[[UIPopoverController alloc] initWithContentViewController:picker]; [poc presentPopoverFromBarButtonItem:bbItem permittedArrowDirections:UIPopoverArrowDirectionAny animated:NO]; } さて、私が最初に[UIPopoveController dealloc]到達したときからさえ...エラーとプログラムがクラッシュします。ARCによる保持、解放、自動解放は行っていません。UIPopoverControllersARCを利用する際に特別な考慮事項はありますか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.