协议上的内存管理

时间:2012-05-22 06:53:12

标签: ios cocoa-touch memory-management

我正在使用协议,并且泄漏, 这是我的代码:

+ (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;
}

如果我进行自动释放,那么它将会崩溃。那么我现在该怎么办?请帮助我...... 谢谢......

2 个答案:

答案 0 :(得分:2)

strategyFromType功能

return [strategy autorelease];

当您调用此函数时,请使用retain

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

使用strat变量后

[strat release];

答案 1 :(得分: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”后释放它。