問題タブ [autorelease]

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.

0 投票する
3 に答える
522 参照

objective-c - 値を返すときのObjective-Cアプリケーションでの自動リリース

私はObjective-C言語のメモリ管理ガイドを読みましたが、この章を何度も読んだ後でも、これはまだ疑問です。

次のようなオブジェクトのメソッドで作成したオブジェクトを返したいとします。

私はこれを行うことができますが、所有権ポリシーに従って正しくありません。ガイドは、正しい解決策は次のようになると述べています。

自動リリースしているので、私はもはや所有者ではないからです。私の質問は、NSStringが実際にリリースされ、割り当てが解除されるのはいつかということです。最後に初期化されたプールが解放されたのはいつですか?これは、プールを作成しない場合、アプリケーションが閉じられたときにこのオブジェクトが解放されることを意味します(xcodeがデフォルトで作成するプールは最後に解放されます)。これは正しいです?同じことが、次のように私によって割り当てられていないオブジェクトにも当てはまります。

?他の場所で解放するためのプールを作成しない場合、xcodeによって作成されたプールが解放されるときに、アプリケーションの最後に解放されますか?ご説明いただきありがとうございます。

0 投票する
3 に答える
1956 参照

objective-c - 以前に割り当て解除されたオブジェクトの問題のリリース

csv ファイルから 1 行を読み取る関数があります。しかし、以前に割り当て解除されたオブジェクトのエラーのリリース、または「二重解放」エラーが発生することがあります。

エラーメモリアドレスに基づいて、このエラーの原因となったオブジェクトを追跡しようとしましたが、これを行うことができませんでした。

コードは次のとおりです。

そして、次のコードは、上記のクラスの使用方法を示しています。

コードを実行して csv の解析を終了すると、自動解放プールを解放しようとすると、アプリのメイン関数で二重解放エラーが発生します

NSAutoreleasePool * プール = [[NSAutoreleasePool alloc] init]; int retVal = UIApplicationMain(argc, argv, nil, nil);

誰かがこの問題を解決するのを手伝ってくれますか? ありがとうございました![プール解放];

0 投票する
2 に答える
1499 参照

objective-c - リークまたはクラッシュ - 自動リリースとリリースの違い

理解度の問題があります。この方法は次のとおりです。

コメントを外すとrelease、アプリがクラッシュし、リリースされたオブジェクトにアクセスできないと言います。文字列をing し
ないと、 Instruments はリーク (NSPlaceholderString) を報告します。releaseresult

私はautoreleaseそれと同じ行でそれを行うことができます。それallocは問題を解決するでしょう(私は現在アプリでやっています)。

私が正しく理解していればstringByAppendingString:、「古い」結果の割り当てを解除できるように、自動解放されたオブジェクトを作成する必要があります。次に、メソッドarrayWithObject:copyオブジェクトを配列に入れる必要があります。だから私の考えは、配列にコピーされた後に文字列を解放することでした。

私の知識に何かが欠けているか、何か間違っていますか?

0 投票する
4 に答える
3195 参照

iphone - UIImageをいつリリースしますか?

次のコードを使用してサブイメージを描画します

ここで、getSubImageは次のように定義されます

コードは正しいですか?

「CGImageRelease」imrefは安全ですか?

サブ「CGImageRetained」のimrefはありますか?

subImをリリースする必要がありますか(リリースするとエラーが発生します)?

subImはautorelease-poolに含まれていますか?含まれている場合、これをどのように知ることができますか?

一般に、オブジェクトが(デバッグ目的で)自動解放プールに含まれているかどうかを確認できますか?

0 投票する
2 に答える
1690 参照

ios4 - ボタンを押した後、毎秒短い音を再生する必要があるときに AVAudioPlayer オブジェクトを解放する方法

私は次の問題を抱えています。私のアプリは、ユーザーがボタンを押した後、指定された回数 (たとえば 5 回) 毎秒ティック サウンドを再生する必要があります。

私はこれを使用しました:

for (int w=1; w<=5; w++) {
[NSThread detachNewThreadSelector:@selector(tic) toTarget:self withObject:nil];
[NSThread sleepForTimeInterval:1.0];
}

どこ:

- (void)tic {
NSAutoreleasePool *ticPool = [[NSAutoreleasePool alloc] init];
player_tic = [[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath: [[NSBundle mainBundle] pathForResource:@"tick" ofType:@"aif"]] error:nil];
[player_tic setDelegate:self];
[player_tic play];
[ticPool drain];
}

と:

- (void) audioPlayerDidFinishPlaying: (AVAudioPlayer *)player_tic successfully:(BOOL)flag {
NSLog(@"Audio finished playing.");
[player_tic release];
}

すべてがうまくいくようです。私の問題は、オブジェクトが最後に一緒に解放されることです。サウンドを再生するたびに、関連する「player_tic」をすぐに解放する
必要があります。

他の情報:

.m:
@synthesize player_tic;

.h:
@interface myController : UIViewController {
...
AVAudioPlayer *player_tic;
}
@property (nonatomic, retain) AVAudioPlayer *player_tic;

何よりも、コンパイル時に次の警告があります。
local declaration of 'player_tic' hides instance variable

私を助けてください!
事前にどうもありがとうございました。

――カルロ

0 投票する
1 に答える
172 参照

objective-c - Objective-C:メモリリークか、自動解放による複数の割り当てがあるかどうか。

次のことを行うと、メモリリークが発生しますか?

0 投票する
2 に答える
126 参照

iphone - iPhoneのオートリリースの使い方に関する質問

次のシナリオで割り当てとメモリ管理がどのように行われ、処理されるかを理解してください。私は疑似コードの例を示しており、私を悩ませている質問は以下のインラインです。

0 投票する
3 に答える
1691 参照

objective-c - 目的 C: この状況でデリゲートを解放する方法

リクエストが終了した後、カスタム デリゲート オブジェクトを使用していくつかのクリーンアップ タスクを実行しています。ASIHTTPRequest はデリゲートを保持しないため、自動解放できません。現在、これがデリゲートの割り当てと解放の方法です。

アプリ デリゲート

MyDelegate.m

これを行うより良い方法はありますか?デリゲートに自分自身を解放させるのは見苦しく、Xcode のビルドと分析は、私がしていることに違和感を覚えます。

0 投票する
1 に答える
524 参照

iphone - iPhoneとMailcoreのメモリリークの問題

現在使用しているアプリでは、Mailcore(http://www.mronge.com/m/MailCore/API/)を使用してメールサーバーの操作を処理しています。バックグラウンドでSMTP接続を介してメッセージを送信しようとしています。問題は、メッセージが送信されるたびに、かなりの量のメモリリークが発生することをリークが教えてくれることです。これが私のせいなのか、Mailcoreのせいなのかを理解しようとしています。コードは次のとおりです。

私のビューコントローラーから:

私のアプリデリゲートから:

0 投票する
2 に答える
1168 参照

objective-c - スレッドで作成され、Objective-C で別のスレッドに渡されるオブジェクトの自動解放

次のように、別のスレッドの別のオブジェクトのメソッドに渡されるオブジェクトを作成するオブジェクトのメソッドがあります。

メソッドでは、オブジェクトが作成者によって何らかの形で解放されると仮定して、オブジェクトをすぐに保持します。私の質問は: MyClass がそのオブジェクトを正しく解放するにはどうすればよいですか? これは正しい方法ですか?

私の解決策は、メソッドでオブジェクトを手動で解放することでした。とにかく、Leak アナライザーがまだこれをリークとして認識しており、所有者がオブジェクトを解放する責任があるため、Apple が推奨しているものではないようです。

この状況を処理する正しい方法を説明してもらえますか? ありがとう!