0

関数によって返されるカスタムオブジェクト(LinesOfTextクラスと呼ばれる)でリークメモリエラーが発生します。これは、詳細な実装がない単純な例です。

-(void)myMethod(){
LinesOfText *linesOfText = [self linesOftext:@"this is my text"];
} 

-(LinesOfText *)linesOftext:(NSString *)_string{
LinesOfText *linesOfText = [[linesOfText alloc] init];
[linesOfText propsOfTextLine:_string];
return linesOfText;
}

オブジェクトをどこでリリースするかわからない

4

2 に答える 2

0

myMethodで、次を使用します。

LinesOfText *linesOfText = [[LinesOfText linesOftext:@"this is my text"] autorelease];

それ以外の:

LinesOfText *linesOfText = [self linesOftext:@"this is my text"];

他のファイルでは、次を使用します。

+(LinesOfText *)linesOftext:(NSString *)_string {

それ以外の:

-(LinesOfText *)linesOftext:(NSString *)_string {
于 2012-10-08T22:31:07.877 に答える
0

通常、このようなメソッドは自動解放された値を返す必要があります。つまり、linesOftextメソッドで次のようにします。

return [linesOfText autorelease];

(または、作成時に自動リリースを呼び出します)、

LinesOfText *linesOfText = [[[linesOfText alloc] init] autorelease];

慣例により、メソッド名に「new」、「alloc」、「copy」が含まれている場合、保持されたオブジェクトを返す必要があります。それ以外の場合は、自動解放されたオブジェクトを返します(たとえば、NSMutableArrayのarrayWithCapacity:やNSStringのstringWithFormat:...などのメソッドを参照してください。詳細については、https://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/を参照してください。 Articles / mmRules.html

そして、はい、zsnowが示唆しているように、可能であれば静的(+)メソッドにするのは良い考えかもしれません。

于 2012-10-08T22:33:34.040 に答える