Appleのサンプルコード "tweeting"を取り出し、ARC(download my project here to test the problem yourself)を使用しないように修正しました。実際に一つだけ「自動リリース」文が必要だった。ARTなしのTWTweetComposeViewControllerメモリリーク
// Set up the built-in twitter composition view controller.
tweetViewController = [[[TWTweetComposeViewController alloc] init]autorelease];
// Set the initial tweet text. See the framework for additional properties that can be set.
[tweetViewController setInitialText:@"Hello. This is a tweet."];
// Create the completion handler block.
[tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
NSString *output;
switch (result) {
case TWTweetComposeViewControllerResultCancelled:
// The cancel button was tapped.
output = @"Tweet cancelled.";
break;
case TWTweetComposeViewControllerResultDone:
// The tweet was sent.
output = @"Tweet done.";
break;
default:
break;
}
//[self performSelectorOnMainThread:@selector(displayText:) withObject:output waitUntilDone:NO];
// Dismiss the tweet composition view controller.
[self dismissModalViewControllerAnimated:NO];
}];
// Present the tweet composition view controller modally.
[self presentModalViewController:tweetViewController animated:YES];
あなたはつぶやきを送信したり、「tweetViewController」でキャンセルをクリックすると、あなたがtweetViewControllerの割り当てが解除されることを期待します。その代わりに、オブジェクトは添付されたイメージ(ツイートに添付されている場合)を含むメモリ内に残ります。だから、ユーザーが別のツイートを作ろうとすると、tweetViewControllerがリークしたためにアプリケーションのメモリが大きくなってしまいます。
お気づきのように自動的に保持されていないので、tweetViewControllerは、ブロック内で言及されていません。..
私は「[[TWTweetComposeViewControllerのalloc]のinit]は、」メモリリークが発生していること。楽器を使用して1を証明しました
私がそれを証明するために試した別のことは、 "NSLog("%@ "、tweetViewController);"コントローラーが解除された後のいくつかのランサイクルです。 tweetViewControllerがTWTweetComposeViewControllerインスタンスを指していないため、通常はプログラムがクラッシュしているはずです。代わりに、以前のインスタンスを正しく印刷し、メモリリークを証明しました。
私は、これはメモリ管理規則に違反によるものであり、避けるために発見した唯一の方法は以下の通りです:
[tweetViewController setCompletionHandler:^(TWTweetComposeViewControllerResult result) {
// Dismiss the tweet composition view controller using animated YES!!
[self dismissModalViewControllerAnimated:YES];
[tweetViewController release];
}];
アニメーションせずにそれを却下した場合、メモリリークが発生します...あなたを持っています問題に気付いた?私は何か間違っているのですか?あなた自身で試してみてください...
これに関するアップデートはありますか?私はそれがまだ問題であるかもしれないと思うが、それは私のコードの中で何か他のものかもしれない。 –
iOS 5.1にはまだ存在しています – fphilipe