0

私はプロトコルを使用していますが、リークが発生しています。これが私のコードです:

+ (id<GMGridViewLayoutStrategy>)strategyFromType:(GMGridViewLayoutStrategyType)type
{
    id<GMGridViewLayoutStrategy> strategy = nil;

    switch (type) {
        case GMGridViewLayoutVertical:
            strategy = [[GMGridViewLayoutVerticalStrategy alloc] init];
            break;
        case GMGridViewLayoutHorizontal:
            strategy = [[GMGridViewLayoutHorizontalStrategy alloc] init];
            break;
        case GMGridViewLayoutHorizontalPagedLTR:
            strategy = [[GMGridViewLayoutHorizontalPagedLTRStrategy alloc] init];
            break;
        case GMGridViewLayoutHorizontalPagedTTB:
            strategy = [[GMGridViewLayoutHorizontalPagedTTBStrategy alloc] init];
            break;
    }

    return strategy;
}

自動解放を行うと、クラッシュします。どうすればいいですか?助けてください...ありがとう...

4

2 に答える 2

2

あなたのstrategyFromType職務で

return [strategy autorelease];

この関数を呼び出すときは、retain

GMGridViewLayoutStrategy *strat = [[YourClassName strategyFromType:yourType] retain];

ストラト変数使用後

[strat release];
于 2012-05-22T06:56:52.300 に答える
0
-(id<GMGridViewLayoutStrategy>)strategyFromType:(GMGridViewLayoutStrategyType)type
{id<GMGridViewLayoutStrategy> strategy = nil;

switch (type) {
    case GMGridViewLayoutVertical:
        strategy = [[GMGridViewLayoutVerticalStrategy alloc] init];
        break;
    case GMGridViewLayoutHorizontal:
        strategy = [[GMGridViewLayoutHorizontalStrategy alloc] init];
        break;
    case GMGridViewLayoutHorizontalPagedLTR:
        strategy = [[GMGridViewLayoutHorizontalPagedLTRStrategy alloc] init];
        break;
    case GMGridViewLayoutHorizontalPagedTTB:
        strategy = [[GMGridViewLayoutHorizontalPagedTTBStrategy alloc] init];
        break;
}

return [strategy autorelease];
}

呼び出し側で..

GMGridViewLayoutStrategy *obj = [[YourClassName strategyFromType:yourType] retain];

「obj」を使用した後、それを解放します。

于 2012-05-22T07:06:51.110 に答える