0

我是 iPhone 开发的新手。

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

我在这里调用该方法:

gmGridView = [[GMGridView alloc] init];
gmGridView.layoutStrategy = [GMGridViewLayoutStrategyFactory strategyFromType:GMGridViewLayoutHorizontalPagedLTR];
[self.view addSubview:gmGridView];

现在我的问题是如何释放 strategyFromType 方法的策略对象?它给了我潜在的泄漏。如果我要释放/自动释放,我的应用程序正在崩溃。请帮帮我谢谢...

4

4 回答 4

4
return [strategy autorelease];

更新:
关于返回自动释放对象的答案是正确的,问题是根据项目站点GMGridView中的描述使用。ARC

要求:

iOS 4 及更高版本
Xcode 4.2(GMGridView 使用 ARC)
框架:Foundation、UIKit、CoreGraphics 和 QuartzCore

所以我想你需要将它作为子模块添加到项目中,但你可以搜索一些关于说明的信息......

于 2012-06-04T09:58:10.107 回答
1

如果您正在使用,ARC那么您的代码很好,但没有ARC您应该返回一个自动释放的对象:

+ (id)strategyFromType:(GMGridViewLayoutStrategyType)type { 
    id 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];
}

方法返回的所有对象都应该是autorelease,除了 ifallocnew任何copy方法。

我真的建议阅读Advanced Memory Management Programming Guide

于 2012-06-04T10:00:46.640 回答
0

当您返回对象时,您需要自动释放对象

return [strategy autorelease];
于 2012-06-04T09:59:54.217 回答
0

返回[策略自动释放];还有[gmGridView 发布];

在函数结束时

于 2012-06-04T10:34:50.580 回答