0

質問1

Place *place = [[[Place alloc] initwithCoordinate:location anotationType:CSMapAnnotationTypeStart] autorealease];
place.name = name;
place.description = description;
place.strUniqueIdentity = uniqueIdentity;
NSLog(@"Unique identity %@",uniqueIdentity);

PlaceMark *marker = [[PlaceMark alloc] initWithPlace:place annotationType:MapAnnotationTypePin];
return [marker autorelease];

xcode 4.6.2 でコードを分析すると、最後から 2 行目に「オブジェクトが送信されました - autorelease が多すぎます」と表示されます。なぜそれを示しているのか理解できません。

スクリーンショット 1

質問2:

return [[[OAProblem alloc] initWithResponseBody:response] autorelease];

そして、この行では、「'self' に保存されているオブジェクトの潜在的なリーク」が示されています。

スクリーンショット 2

4

6 に答える 6

2

initwithCoordinateのスペルが間違っているため、警告が表示されます。initWithCoordinateCocoa の命名規則に従って (大文字の W) にする必要があります。

于 2013-04-23T07:55:56.940 に答える
1

Xcode は、OAProblem.c に関するアナライザーの警告で非常に役に立ちません。

実際に問題となっているコードは、init メソッドにあります。警告 (この場合) は、「init メソッドが alloc によって割り当てられたオブジェクトを解放せずに nil を返している」ことを意味します。修正は[self release]、両方の障害パスに a を追加することです。

- (id)initWithProblem:(NSString *) aProblem
{
    NSUInteger idx = [[OAProblem validProblems] indexOfObject:aProblem];
    if (idx == NSNotFound) {
        [self release]; // <-- Add this line to fix the warning
        return nil;
    }

    return [self initWithPointer: [[OAProblem validProblems] objectAtIndex:idx]];
}

についても同じですinitWithResponseBody

于 2013-06-17T11:34:41.827 に答える
0

私の質問の最初の部分の答えは、初期化メソッドの小さな「w」です

-initwithCoordinate: anotationType:

Cocoa の命名規則に従って、大文字の「W」を使用する必要があります。

初期化メソッドを次のように置き換えました

-initWithCoordinate: anotationType:

私の質問の2番目の部分の答えは、両方の障害パスに[自己解放]を追加することです

Xcode は、OAProblem.c に関するアナライザーの警告で非常に役に立ちません。

実際に問題となっているコードは、init メソッドにあります。警告 (この場合) は、「init メソッドが alloc によって割り当てられたオブジェクトを解放せずに nil を返している」ことを意味します。修正は、両方の障害パスに [自己解放] を追加することです。

- (id)initWithProblem:(NSString *) aProblem
{
    NSUInteger idx = [[OAProblem validProblems] indexOfObject:aProblem];
    if (idx == NSNotFound) {
        [self release]; // <-- Add this line to fix the warning
        return nil;
    }

    return [self initWithPointer: [[OAProblem validProblems] objectAtIndex:idx]];
}

initWithResponseBody についても同様です。

于 2013-04-23T08:47:13.020 に答える
0
Place *place = [[Place alloc] initwithCoordinate:location anotationType:CSMapAnnotationTypeStart];
place.name = name;
place.description = description;
place.strUniqueIdentity = uniqueIdentity;
NSLog(@"Unique identity %@",uniqueIdentity);

PlaceMark *marker = [[PlaceMark alloc] initWithPlace:place    annotationType:MapAnnotationTypePin];
[place release];//I think you are release place object, cause of memory leak
return [marker autorelease];
于 2013-04-23T07:32:57.303 に答える
-2

より良い解決策は、アプリを ARC (自動参照カウント) に変換することです。メモリの問題が発生する可能性があります。

Xcodeプロジェクトを編集>リファクタリング>目的のC ARCに変換> OK

于 2013-04-23T07:30:33.377 に答える