【问题标题】:releasing object after return, is it good practice?返回后释放对象,这是一种好习惯吗?
【发布时间】:2012-06-01 09:04:32
【问题描述】:

我只是想知道我们是否可以这样做:

 SBJsonParser *parser = [[SBJsonParser alloc] init];
    id repr = [parser objectWithString:self];

    return repr;
    [parser release];

所以在返回对象后释放它,这是一个好习惯吗?感谢任何信息:)

【问题讨论】:

    标签: objective-c ios


    【解决方案1】:

    简单回答:否

    你不能在return 语句之后执行任何事情。

    相反,您应该autorelease 对象。这将在周围 AutoreleasePool 的下一次清理运行中释放它。

    SBJsonParser *parser = [[[SBJsonParser alloc] init] autorelease];
    return [parser objectWithString:self];
    

    【讨论】:

    • 在返回之前获取repr然后releaseing parser会有什么问题吗?
    • 不,这也是可能的。我个人只是更喜欢那种紧凑的风格。
    【解决方案2】:
    SBJsonParser *parser = [[[SBJsonParser alloc] init]]autorealease];//<<< auto release the object on creaion
        id repr = [parser objectWithString:self];
    
        return repr;
    

    【讨论】:

    • 哦,非常感谢您的回复,实际上是的,我知道那样,但我想知道转动对象后释放对象的方式:)
    【解决方案3】:

    您的编译器不会到达 return 语句之后的任何行(除非您使用 finally 语句。)。你必须autorelease它。

    【讨论】:

      【解决方案4】:

      实际上你在 return 语句之后的代码甚至不会被执行。 glogic 的解决方案是必经之路。

      【讨论】:

        【解决方案5】:

        您学习过编程基础知识吗?在 return 语句之后,什么都不执行。

        见: Why does NSLog() not do anything if it's after a method's return?

        【讨论】:

          【解决方案6】:

          方法返回到调用它时的代码

          • 完成方法中的所有语句

          • 到达返回语句

          • 或抛出异常。

          【讨论】:

            猜你喜欢
            • 2017-12-09
            • 1970-01-01
            • 1970-01-01
            • 2011-08-30
            • 2019-11-20
            • 2012-05-07
            • 2023-04-05
            • 2023-02-15
            • 2011-03-06
            相关资源
            最近更新 更多