ストーリーの短いバージョンをここで提供するために、私はメモリリークの例を作成しようとしているのですが、Instrumentsアプリケーションでリークパフォーマンスツールを使用する理由は何ですか?私はメモリリークを検出するこのメソッドを使用する必要がありますが、私が作成した例では、ツールが検出したメモリリークは発生していません(はい、ここでは失敗しているようです)。ここでは、コードがあります:リークパフォーマンスツールが明白なメモリリークを検出しない
// Memory_Leak_ExampleViewController.h
// Memory Leak Example
#import <UIKit/UIKit.h>
#import "StringReturner.h"
@interface Memory_Leak_ExampleViewController : UIViewController {
IBOutlet UITextField* xTF;
IBOutlet UITextField* yTF;
IBOutlet UITextView* result;
StringReturner* sr;
}
-(IBAction)addTogether;
-(IBAction)releaseSR;
@end
// Memory_Leak_ExampleViewController.m
// Memory Leak Example
#import "Memory_Leak_ExampleViewController.h"
@implementation Memory_Leak_ExampleViewController
- (void)viewDidLoad {
[super viewDidLoad];
sr = [[StringReturner alloc] initWithFrame:self.view.frame];
}
- (IBAction)addTogether
{
[result setText:[sr returnEq:[xTF.text intValue]:[yTF.text intValue]]];
}
- (IBAction)releaseSR
{
[sr release];
}
@end
//StringReturner.h
#import <UIKit/UIKit.h>
@interface StringReturner : UIView {
NSString* string;
NSString* returnString;
}
-(NSString*)returnEq:(int)x:(int)y;
@end
// StringReturner.m
#import "StringReturner.h"
@implementation StringReturner
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
}
return self;
}
- (NSString*)returnEq:(int)x:(int)y
{
string = [[NSString alloc] initWithString:@""];
int result = x+y;
string = [NSString stringWithFormat:@"%d + %d = %d", x, y, result];
return string;
}
- (void)dealloc {
[super dealloc];
}
@end
IBActionsとIBOutletsのすべてが正しく設定されているので、メモリリークが一度追加し、StringReturnerのインスタンスを解放した後にすべきではありませんか?そうでない場合、私は何ですか間違っている?
あなたのコメントを吹き飛ばしたと思います。ごめんなさい。しかしあなたの質問に答えるために、 'format'ファミリーの関数で作成された文字列が漏れることがあります。 – dbv