标签: alloc

拥有数组dealloc'd时没有调用-dealloc方法......应该吗?

以下是Foundation应用程序中的两段Objective-C代码.这段代码在一个函数中:

    [arrayOfObjects addObject:[[TheShape alloc] init]];
    NSLog(@"%@", arrayOfObjects); // log verifies "<TheShape..." is in the array
    [arrayOfObjects release];
Run Code Online (Sandbox Code Playgroud)

在我的TheShape类中,我有这个dealloc覆盖方法:

    - (void)dealloc {
        NSLog(@"TheShape dealloc called.");
        [super dealloc];
    }
Run Code Online (Sandbox Code Playgroud)

虽然我的程序不起作用,但它并不像我期望的那样工作.当[arrayOfObjects release]发送消息时,我希望看到的"TheShape的dealloc ..."字符串出现在日志中.它没有.

Q1:为什么不呢?

所以我挖了一些并简化了一些事情.如果我做一些更简单的事情:

    TheShape *aShape = [[TheShape alloc] init];
    [aShape release];
Run Code Online (Sandbox Code Playgroud)

调试消息仍未出现在日志中.

Q2:为什么不呢?

但如果我这样做:

    TheShape *aShape = [TheShape new];
    [aShape release];
Run Code Online (Sandbox Code Playgroud)

调试消息确实出现在日志中.如果我将第一个样本中的alloc/init更改为,则调试消息也会出现在日志中new.

Q3:为什么?

很显然,我失去了一些东西在分配/初始化/释放周期概念(Q的1和2),并在假想的等效newalloc/init(Q3).任何人都可以指点我的教程,对于像我这样难以思考的事情来解释一下吗?

谢谢,

法案

release objective-c init new-operator alloc

1
推荐指数
1
解决办法
915
查看次数

目标C:发布和分配

我是C和Objective C的新手,但我找不到这个答案

所以我遇到了一个问题,花了我一段时间来解决问题,基本上我被告知,当你分配一个对象时,你应该释放它.这就是我所做的,它导致我的程序崩溃......

这是代码:

NSString *numberString = [[NSString alloc] init];
numberString = resultLabel.text;
[self setFirstNumber:[numberString doubleValue]];
[resultLabel setText:@"0"];
[numberString release];
Run Code Online (Sandbox Code Playgroud)

我想我弄清楚为什么它是因为"numberString = resultLabel.text"行,但我不明白为什么程序崩溃了.为什么我不能发布numberString?如果我不这样做会导致内存泄漏吗?

PS我知道代码很笨,我是编程的新手,而且是Objective C的超级新手.

PSS我稍后在 - (void)dealloc {}中发布resultLabel

release objective-c alloc

1
推荐指数
1
解决办法
1699
查看次数

可以再次分配已发布的对象吗?

如果我这样做

Object * myObject = [[Object alloc]init];
[myObject release];
Run Code Online (Sandbox Code Playgroud)

在下一行分配我的对象有什么不对

myObject = [[Object alloc]init];
Run Code Online (Sandbox Code Playgroud)

再次?

memory-management objective-c alloc

1
推荐指数
1
解决办法
112
查看次数

为什么在Objective-C对象初始化中需要alloc?

我一直在浏览Objective-C中的一些教程,当涉及到命令alloc()以及它如何用于初始化对象时,我感到很困惑.

该教程说要做以下事情,我无法弄清楚为什么有必要.

更改

NSDate *now = [NSDate date];
Run Code Online (Sandbox Code Playgroud)

NSDate *now = [[NSDate alloc] init];
Run Code Online (Sandbox Code Playgroud)

为什么这个改变是必要的,因为第一行工作得很好?我想我正在寻找两条线的差异.谢谢!

objective-c alloc

1
推荐指数
1
解决办法
968
查看次数

协助处理 c++ 中的内存分配错误,使用 g++ 的 linux

我已经搜索了与我有类似问题的其他人,但他们的代码都与我大不相同。

当我用 g++ 编译以下代码时,出现错误:

篮子OOP: malloc.c:2451: sSYSMALLOc: 断言`(old_top == (((mbinptr) (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= (unsigned long)(((((__builtin_offsetof (struct malloc_chunk, fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof) (size_t))) - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) == 0)' 失败。中止(核心转储)

我从不使用 free() 或类似的函数,所以我认为这不是问题所在。

当我通过 valgrind 运行我的代码时,我得到“大小为 4 的无效写入”。然后是一些我不完全理解的胡言乱语,我认为我认为是 Player 构造函数。

对于那些想知道这是一个篮球模拟程序的人,我正在为一项任务编写它以帮助学习和理解 OOP,所以显然我不是要你为我编写我的代码,这只是我以前从未遇到过的错误并且需要修复它才能继续分配。

ps:抱歉没有评论,我还没有解决这个问题:/ pps:格式可能看起来很奇怪,因为我必须缩进代码才能让它全部显示为代码

感谢任何提前提供帮助的人!

#include <iostream>
#include <time.h>
#include <string> …
Run Code Online (Sandbox Code Playgroud)

c++ malloc alloc

1
推荐指数
1
解决办法
160
查看次数

为什么我不能对C中的malloced结构使用部分结构初始化

在C99中,您可以通过这种方式简单地初始化静态分配的结构

struct sometype {
   int a;
   double b;
};
sometype a = {
   .a = 0;
};
Run Code Online (Sandbox Code Playgroud)

好吧,这不适用于像这样的堆上的结构.

struct sometype *a = malloc(sizeof(struct sometype));
*a = {
   .a = 0;
 };
Run Code Online (Sandbox Code Playgroud)

使用GCC 4.9.2,编译器抱怨

error: expected expression before '{' token
Run Code Online (Sandbox Code Playgroud)

我知道这很愚蠢,但是有什么语法或技术原因我不能这样做吗?

c struct alloc

1
推荐指数
1
解决办法
155
查看次数

Swift 中的指针和 malloc

我试图转换为迅速。

内存分配逻辑面临的问题

Byte *p[10000];

p[allocatedMB] = malloc(1048576);
memset(p[allocatedMB], 0, 1048576);
Run Code Online (Sandbox Code Playgroud)

如何快速写这个?

malloc pointers alloc swift

1
推荐指数
1
解决办法
2005
查看次数

如何调试异常C内存/堆栈问题

对不起,我不能具体代码,但我看到的问题是异常的.字符串值似乎正在根据其他不相关的代码进行更改.例如,下面传递的参数值只会根据我是否注释掉一个或两个fprintf()调用而改变!通过最后一个fprintf(),该值通常是完全空的(不,我已经检查以确保我没有直接修改参数...我所要做的就是注释掉fprintf()或添加另一个fprintf()并且字符串的值将在某些点发生变化!):

static process_args(char *arg) {
    /* debug */
    fprintf(stderr, "Function arg is %s\n", arg);

    ...do a bunch of stuff including call another function that uses alloc()...

    /* debug */
    fprintf(stderr, "Function arg is now %s\n", arg);    
}

int main(int argc, char *argv[]) {
    char *my_arg;

    ... do a bunch of stuff ...

    /* just to show you it's nothing to do with the argv array */
    my_string = strdup(argv[1]);

    /* debug */
    fprintf(stderr, "Argument 1 is %s\n", my_string);

    process_args(my_string);
} …
Run Code Online (Sandbox Code Playgroud)

c memory stack alloc

0
推荐指数
1
解决办法
440
查看次数

是一系列[array addObject:[[NSNumber alloc] initWithBool:someVariable]?]创建的内存泄漏;

我是否通过以下方式创建多个内存泄漏:

NSMutableArray *array=[[NSMutableArray alloc] init];
[array addObject:[[NSNumber alloc] initWithBool:boolVariable1]];
[array addObject:[[NSNumber alloc] initWithBool:boolVariable2]];
[array addObject:[[NSNumber alloc] initWithInt:intVariable]];
[array addObject:[[NSNumber alloc] initWithFloat:floatVariable]];
[array writeToFile:[self dataFilePath] atomically:YES];
[array release];
Run Code Online (Sandbox Code Playgroud)

使用起来更好:

[array addObject:[NSNumber numberWithInt:intVariable]];
Run Code Online (Sandbox Code Playgroud)

memory-leaks objective-c nsnumber alloc

0
推荐指数
1
解决办法
552
查看次数

iPhone分配和发布

我是ObjC和iPhone的新手.

我下载了多个视图之间的数据共享示例.基本方法是在基础UIApplication中创建数据模型对象,并从/向其获取/设置数据.所以在init方法中我看到了以下代码:


- (id) init;
{
    self.theAppDataObject = [[ExampleAppDataObject alloc] init];
    [theAppDataObject release];
    return [super init];
}
Run Code Online (Sandbox Code Playgroud)

然后,使用委托我们可以访问此对象.


id theDelegate = (id) [UIApplication sharedApplication].delegate;
    ExampleAppDataObject* theDataObject;
    theDataObject = (ExampleAppDataObject*) theDelegate.theAppDataObject;

Run Code Online (Sandbox Code Playgroud)

所以,我的问题出在第一个代码示例中.为什么我们需要为theAppDataObject对象分配内存,然后立即释放对象?为什么我们以后在访问这个对象时会得到nil?

10倍

iphone release objective-c alloc ios

0
推荐指数
1
解决办法
340
查看次数