代码之家  ›  专栏  ›  技术社区  ›  S.P.

我可以在目标C的另一个方法(不保留)中释放一个对象(在方法中创建的)吗?

  •  0
  • S.P.  · 技术社区  · 15 年前

    我可以在目标C的另一个方法(不保留)中释放一个对象(在方法中创建的)吗?

    我的代码如下

    -(NSMutableDictionary*)返回mymutabledictionary{

    NSMutableDictionary*myDict=[[NSMutableDictionary alloc]init];

    [myDict setObject:@“我的名字”forKey:@“名字”];

    [myDict setObject:@“99”forKey:@“年龄”];

    返回myDict;

    }

    -(无效)主要方法{

    NSMutableDictionary*dict=[self returningmymutabledictionary];

    NSLog(@"dict %@",dict);
    
    dict = nil;
    
    [dict release];
    

    }

    Q1)在“main method”中发布返回字典是一个好的实践吗?

    Q2)当我在仪器中运行应用程序时,以下部分出现泄漏。

    [myDict setObject:@“我的名字”forKey:@“名字”];

    如何避免内存泄漏?

    请帮帮我..提前谢谢你的帮助。。

    3 回复  |  直到 15 年前
        1
  •  4
  •   Alex Brown    15 年前
    1. 从第一个函数自动释放。

      返回[myDict autorelease];

    2. 不要把dict赋给nil 之前 你释放它。那是你的记忆泄漏。事实上,现在它是自动释放的,不要释放它。

        2
  •  1
  •   Ishu    15 年前

    替代解决方案

    -(NSMutableDictionary*)返回mymutabledictionary{

    NSMutableDictionary*myDict=[[[NSMutableDictionary alloc]init]自动删除];

    现在亚历克斯说正确的第一个释放对象,然后赋值为零;

        3
  •  1
  •   qnoid    15 年前

    从另一个方法释放已分配的对象没有错,只要 方法首先负责创建对象 .

    在您的示例中可能看起来不是这样,但是如果您在两行之间查看 主要方法 是请求新NSMutableDictionary的方法。

    从这个意义上说,您应该遵循 在负责创建新对象的方法中添加new/alloc。

    您通常会保留对象并在dealloc中释放它,但情况并非总是如此。

    通常,如果您可以控制释放对象,请避免使用autorelease。

    -(NSMutableDictionary *)allocMutableDictionary
    {
        NSMutableDictionary *myDict = [[NSMutableDictionary alloc] init];
        [myDict setObject:@"My Name" forKey:@"name"];
        [myDict setObject:@"99" forKey:@"age"];
    
    return myDict;
    }
    
    -(void)mainmethod
    {
        NSMutableDictionary *dict = [self allocMutableDictionary];
    
        NSLog(@"dict %@",dict);
    
        dict = nil; //making the dict nil means you don't actually release it in the next line
        [dict release];
    }