gpt4 book ai didi

objective-c - 释放对象时出现问题

转载 作者:行者123 更新时间:2023-12-03 16:49:08 25 4
gpt4 key购买 nike

我有这个代码:

Entry.h

#import <Foundation/Foundation.h>

@interface Entry : NSObject {
id object;
SEL function;
}

@property (retain) id object;
@property (assign) SEL function;

-(Entry*) initWithObject:(id)object selector:(SEL)function;

@end

Entry.m

#import "Entry.h"

@implementation Entry

@synthesize object;
@synthesize function;

-(Entry*) initWithObject:(id)obj selector:(SEL)sel {
self = [super init];
[self setObject:obj];
[self setFunction:sel];
return self;
}

-(void) dealloc {
[super dealloc];
if ([self object] != nil)
[[self object] release];
}

@end

当我这样做时:

Entry *hej = [Entry alloc];
[hej release];

我得到:

objc[2504]: FREED(id): message object sent to freed object=0xf5ecd0
Program received signal: “EXC_BAD_INSTRUCTION”.

我做错了什么?

(堆栈溢出时插入代码的功能不起作用,除非我做错了什么,并且您不应该单击“代码示例”然后粘贴。)

最佳答案

+alloc 仅分配内存。您需要 -init 才能在该内存空间中实际创建对象。由于您只是分配内存而不是在那里创建对象,因此在内存块上调用 -release 会给您带来错误。此外,您希望您的 [super dealloc] 调用出现在 -dealloc 方法的末尾。更改这两件事,以下内容应该有效:

Entry *hej = [[Entry alloc] init];
[hej release];

关于objective-c - 释放对象时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1064495/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com