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

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

18
プロジェクト内の単一ファイルのARCを無効にするにはどうすればよいですか?
プロジェクトでARCを使用しています。しかし、ARCのルールが少し壊れやすいファイル(ユニットテストやモックオブジェクトなど)に遭遇しました。私はこのオプションを見つけることができませんでしたが、ファイルごとにARCを無効にする方法があったと聞いたことを思い出します。 これは可能ですか?ファイルごとにARCを無効にするにはどうすればよいですか?

19
セレクターが不明であるため、performSelectorがリークを引き起こす可能性があります
ARCコンパイラから次の警告が表示されます。 "performSelector may cause a leak because its selector is unknown". これが私がやっていることです: [_controller performSelector:NSSelectorFromString(@"someMethod")]; なぜこの警告が出るのですか?セレクターが存在するかどうかをコンパイラーがチェックできないことを理解していますが、なぜリークが発生するのですか?そして、この警告を受け取らないようにコードを変更するにはどうすればよいですか?

11
IBOutletsはARCの下で強いべきか弱いべきか?
ARCを使用してiOS 5専用に開発しています。万一IBOutlet秒UIView秒(およびサブクラス)は可能strongかweak? 以下: @property (nonatomic, weak) IBOutlet UIButton *button; これをすべて取り除くでしょう: - (void)viewDidUnload { // ... self.button = nil; // ... } これを行うには問題がありますか?テンプレートはstrong、 'Interface Builder'エディターからヘッダーに直接接続するときに作成される自動生成プロパティと同じように使用していますが、なぜですか?はUIViewControllerすでにそのサブビューを保持strongするへの参照を持ってviewいます。

9
Swiftのクロージャー内では常に[unowned self]を使用する必要がありますか
WWDC 2014セッション403 Intermediate Swiftとトランスクリプトで、次のスライドがありました その場合スピーカーは言った、[unowned self]そこで使わないとメモリリークになる。常に[unowned self]クロージャー内で使用する必要があるという意味ですか? 上スウィフト天気アプリのViewController.swiftのライン64、私は使用しません[unowned self]。しかし、および@IBOutletのようないくつかを使用してUIを更新します。私が定義したはすべてであるため、問題ない可能性があります。しかし、安全のために、常に使用する必要がありますか?self.temperatureself.loadingIndicator@IBOutletweak[unowned self] class TempNotifier { var onChange: (Int) -> Void = {_ in } var currentTemp = 72 init() { onChange = { [unowned self] temp in self.currentTemp = temp } } }

8
Objective-C ARC:強いvs保持、弱いvs割り当て
ARC strongとによって導入されたプロパティには、2つの新しいメモリ管理属性がありweakます。 とcopyは明らかにまったく別のものですが、strongvs retainとweakvsの間に違いはありますassignか? 私の理解では、ここでの唯一の違いは、ポインターにweak割り当てnilられることですが、割り当てられassignません。つまり、解放されたポインターにメッセージを送信すると、プログラムがクラッシュします。しかし、私がを使用する場合weak、これは起こりません。なぜなら、メッセージ送信nilは何もしないからです。 私は間の違いを知らないstrongとretain。 私が使用すべき理由何らかの理由があるassignとretain新しいプロジェクトで、または廃止さのようなものですか?


2
なぜAppleは、ARCでシングルトンパターンを実装するためにdispatch_onceを使用することを推奨するのですか?
ARCでシングルトンの共有インスタンスアクセサーでdispatch_onceを使用する正確な理由は何ですか? + (MyClass *)sharedInstance { // Static local predicate must be initialized to 0 static MyClass *sharedInstance = nil; static dispatch_once_t onceToken = 0; dispatch_once(&onceToken, ^{ sharedInstance = [[MyClass alloc] init]; // Do any other initialisation stuff here }); return sharedInstance; } バックグラウンドで非同期にシングルトンをインスタンス化することは悪い考えではありませんか?つまり、その共有インスタンスを要求してすぐにそれに依存しているのに、dispatch_onceがクリスマスまで私のオブジェクトを作成するとしたらどうなるでしょうか。すぐ戻りませんよね?少なくともそれがグランドセントラルディスパッチの要点のようです。 なぜ彼らはこれをしているのですか?

4
Objective-Cで宣言された@property属性(非アトミック、コピー、ストロング、ウィーク)
:私は、各属性を使用しなければならないとき、誰かが詳細に私に説明することができnonatomic、copy、strong、weak、およびので、上の宣言されたプロパティのために、それぞれが何をするかを説明しますか?ある種の例も素晴らしいでしょう。ARCを使用しています。

10
意味上の問題:プロパティの合成ゲッターは、「所有された」オブジェクトを返すためのCocoa命名規則に従います
現在、iOS 5 SDKを使用してアプリを開発しています。私はNSStringをプロパティにして、それを.mファイルに合成しようとしています(以前に問題なくこれを実行しました)。今、私はこれに遭遇しました:「セマンティックの問題:プロパティの合成ゲッターは、「所有された」オブジェクトを返すためのCocoa命名規則に従います。」 これは私のコードです:.h @interface ViewController : UIViewController { NSString *newTitle; } @property (strong, nonatomic) NSString *newTitle; .m @synthesize newTitle; 誰かが私がこれをどのように修正できるか手がかりを持っていますか?ありがとう!!

8
プロジェクトをARCを使用するように変換する場合、「switch case is in protected scope」とはどういう意味ですか?
ARCを使用するようにプロジェクトを変換する場合、「switch case is in protected scope」とはどういう意味ですか?Xcode 4の[編集​​]-> [リファクタリング]-> [Objective-C ARCに変換]を使用して、プロジェクトをARCを使用するように変換しています...発生するエラーの1つは、スイッチケース。 編集、これがコードです: エラーは「デフォルト」の場合にマークされます。 - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @""; UITableViewCell *cell ; switch (tableView.tag) { case 1: CellIdentifier = @"CellAuthor"; cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier]; …

6
常に自己の弱い参照をARCのブロックに渡しますか?
Objective-Cでのブロックの使用について少し混乱しています。私は現在ARCを使用しており、アプリには非常に多くのブロックがあり、現在は常にself弱い参照ではなく参照しています。これが、これらのブロックselfが割り当て解除されないように保持および保持する原因となる可能性がありますか?問題は、ブロック内のweak参照を常に使用する必要selfがあるかどうかです。 -(void)handleNewerData:(NSArray *)arr { ProcessOperation *operation = [[ProcessOperation alloc] initWithDataToProcess:arr completion:^(NSMutableArray *rows) { dispatch_async(dispatch_get_main_queue(), ^{ [self updateFeed:arr rows:rows]; }); }]; [dataProcessQueue addOperation:operation]; } ProcessOperation.h @interface ProcessOperation : NSOperation { NSMutableArray *dataArr; NSMutableArray *rowHeightsArr; void (^callback)(NSMutableArray *rows); } ProcessOperation.m -(id)initWithDataToProcess:(NSArray *)data completion:(void (^)(NSMutableArray *rows))cb{ if(self =[super init]){ dataArr = [NSMutableArray arrayWithArray:data]; …

7
弱い参照と所有されていない参照の違いは何ですか?
スウィフトは: 強い参照 弱い参照 所有されていない参照 所有されていない参照と弱い参照との違いは何ですか? 所有されていない参照を使用しても安全ですか? 所有されていない参照は、C / C ++のダングリングポインターのようなセキュリティリスクですか?

5
Objective-Cの自動参照カウントはどのようなリークを防止または最小化しませんか?
MacおよびiOSプラットフォームでは、メモリリークは多くの場合、リリースされていないポインタが原因で発生します。従来、割り当て、コピー、保持をチェックして、それぞれに対応するリリースメッセージがあることを確認することが常に最も重要でした。 Xcode 4.2に付属しているツールチェーンでは、最新バージョンのLLVMコンパイラで自動参照カウント(ARC)が導入されています。これにより、コンパイラにデータをメモリ管理させることで、この問題を完全に回避できます。それはかなりクールであり、多くの不必要で平凡な開発時間を削減し、適切な保持/解放のバランスで簡単に修正できる多くの不注意なメモリリークを防ぎます。MacとiOSアプリでARCを有効にするときは、自動解放プールでさえ別の方法で管理する必要があります(独自NSAutoreleasePoolのをもう割り当てる必要がないため)。 しかし、他のどのメモリリークでも、私がまだ注意しなければならないことを妨げていませんか? おまけとして、Mac OS XとiOSのARCとMac OS Xのガベージコレクションの違いは何ですか?

8
APIを実装するときに、ブロック内で自己をキャプチャしないようにするにはどうすればよいですか?
動作するアプリがあり、Xcode 4.2でそれをARCに変換する作業をしています。チェック前の警告の1つは、selfブロックを強くキャプチャして保持サイクルにつながることです。この問題を説明するために、簡単なコードサンプルを作成しました。私はこれが何を意味するのか理解していると思いますが、このタイプのシナリオを実装するための「正しい」または推奨される方法がわかりません。 selfはクラスMyAPIのインスタンスです 以下のコードは、私の質問に関連するオブジェクトとブロックとの相互作用のみを示すように簡略化されています MyAPIがリモートソースからデータを取得し、MyDataProcessorがそのデータを処理して出力を生成すると仮定します。 プロセッサは、進行状況と状態を伝えるためのブロックで構成されています コードサンプル: // code sample self.delegate = aDelegate; self.dataProcessor = [[MyDataProcessor alloc] init]; self.dataProcessor.progress = ^(CGFloat percentComplete) { [self.delegate myAPI:self isProcessingWithProgress:percentComplete]; }; self.dataProcessor.completion = ^{ [self.delegate myAPIDidFinish:self]; self.dataProcessor = nil; }; // start the processor - processing happens asynchronously and the processor is released in …

1
カスタムの割り当て解除とARC(Objective-C)
私の小さなiPadアプリには、オブザーバーを使用する「言語切り替え」機能があります。すべてのView Controllerは、その実行中に自分自身をオブザーバーに登録しviewDidLoad:ます。 - (void)viewDidLoad { [super viewDidLoad]; [observer registerObject:self]; } ユーザーが[言語を変更]ボタンを押すと、新しい言語がモデルに保存され、オブザーバーに通知さupdateUi:れ、登録されたオブジェクトのセレクターを呼び出します。 これは、TabBarControllerにビューコントローラーがある場合を除いて、非常にうまく機能します。これは、タブバーが読み込まviewDidLoad:れると、ビューを初期化せずに子コントローラーからタブアイコンをフェッチするため、呼び出されないため、これらのビューコントローラーは言語変更通知を受信しないためです。このため、registerObject:呼び出しをinitメソッドに移動しました。 以前viewDidLoad:はオブザーバーに登録していたとき、以前viewDidUnload:は登録解除していました。現在で登録しているのでinit、で登録を解除することは非常に理にかなっていdeallocます。 しかし、これが私の問題です。私が書くとき: - (void) dealloc { [observer unregisterObject:self]; [super dealloc]; } 私はこのエラーを受け取ります: ARCは「dealloc」の明示的なメッセージ送信を禁止します [super dealloc]スーパークラスが適切にクリーンアップされるように呼び出す必要があるので、ARCはそれを禁止しているので、今は行き詰まっています。オブジェクトが死んでいるときに通知を受ける別の方法はありますか?

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