首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >功能即使在池水排出后也能工作,请帮助

功能即使在池水排出后也能工作,请帮助
EN

Stack Overflow用户
提问于 2010-08-18 13:38:31
回答 1查看 189关注 0票数 0

我们将一个对象添加到池中,当池被排出时,这些对象会被清除出内存,如果我不将它们添加到池中,它们将保留在内存中,并且可以在调用池排出方法后进行访问。我在代码中所做的是,我没有将我的类的对象添加到池中,而是在池排出之后调用了该方法。这是我的代码

代码语言:javascript
复制
#import <Foundation/Foundation.h>

@interface Myclass : NSObject
{

}

-(void)fun;

@end

@implementation Myclass

-(void)fun
{       
    NSMutableArray *arr = [[NSMutableArray alloc]init];

    char ch[10];
    NSString *str;

    for(int i =0;i<3;i++)
    {           
        scanf("%s",ch);
        str = [NSString stringWithCString:ch];
        [arr addObject:str];
    }

    for(int i =0;i<3;i++)
    {           
        NSLog(@"The values of mutable array are: %@", [arr objectAtIndex:i]);           
    }
}

@end

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    Myclass *obj = [[Myclass alloc]init];
        [obj fun];

    // insert code here...
    NSLog(@"\nEnter pool drain");
    [pool drain];
    [obj fun];
    return 0;
}

现在,当每次我向数组中添加一个值时,在池排出之后调用有趣的方法时,我会得到一个错误,它说

NSautoreleaseNoPool():NSCFString类的对象0x105a80自动释放,没有适当的池-只是泄漏堆栈:(0x4dlfof ox3de442)

但是,即使在显示此msg之后,我仍继续将数据添加到我的数组中,它工作正常,但每次都显示上面的msg。你能告诉我为什么会这样吗?

我还想知道他们的any函数是否可以帮助我们清除控制台屏幕,我尝试了ncurses.h,但无法做到这一点。

关于这两个问题,请帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2010-08-18 16:33:33

您不需要将任何对象添加到自动释放池中。当它被排出时,它是空的。要将对象添加到自动释放池,必须自动释放它们。例如在娱乐中

代码语言:javascript
复制
NSMutableArray *arr = [[[NSMutableArray alloc]init] autorelease];

在main中:

代码语言:javascript
复制
Myclass *obj = [[[Myclass alloc]init] autorelease];

通过这两个修改,您将看到发生以下两种情况之一:

在排出之后的第二个[obj fun]上,您可能会在向已取消分配的对象发送消息时获得异常。

  • 您可能会走运,在第二个[obj fun]上,obj的内存仍然完好无损,在这种情况下,您应该会看到一条发布到控制台日志的消息,指出由于没有自动释放池,arr将泄漏。

注释后面的编辑

此消息

NSautoreleaseNoPool():NSCFString类的对象0x105a80自动释放,没有池-只是泄漏堆栈:(0x4dlfof ox3de442)

是因为下面这行调用的方法:

代码语言:javascript
复制
str = [NSString stringWithCString:ch];

尝试将字符串放入自动释放池中,然后再将其返回给您。但是,您已经耗尽了您曾经拥有的唯一池,因此尝试失败。因此,字符串将泄漏。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3509237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档