gpt4 book ai didi

c - 关于 Objective-C 中指针的问题

转载 作者:行者123 更新时间:2023-12-03 20:59:57 26 4
gpt4 key购买 nike

global.h 文件中我声明

dataManager *IdataManager;

然后,当程序初始化时,我分配并初始化该变量,并在几个不同的 View 中使用它作为访问应用程序启动时下载的一组数据的方法。

最近我注意到,当我拉出一个 View ,关闭它,然后再次打开它时,我在尝试访问全局 IdataManager 时发生崩溃。

我最终得出的结论是,它的内容是通过取消初始化的 View 以某种方式释放的。我查看了唯一使用该变量的地方:

CCandidate *currentCandidate = [IdataManager CurrentCandidate];

所以我将其更改为:

CCandidate *currentCandidate = [[IdataManager CurrentCandidate] retain];

我不确定保留关键字是如何工作的,但听起来如果 View 真的释放了我的数据,我应该在创建此指针时指定它应该被保留。

这解决了崩溃问题,但我不太明白为什么会发生这种情况。当您释放其所有者时,objective-c 是否总是释放您创建的指针?我的印象是我只是存储一个内存地址并将其命名为 currentCandidate。

CCandidate.h:

#import <Foundation/Foundation.h>


@interface CCandidate : NSObject {
int ID;
NSString* FName;
NSString* MName;
NSString* LName;
NSString* FullName;
NSString* DOB;
NSString* Occupation;
NSString* Employer;
NSString* Phone;
NSString* Fax;
NSString* Email;
NSString* Website;
NSString* Party;
NSString* TwitterUName;
NSString* TwitterHashTag;
NSString* Biography;
NSString* BiographyLink;
NSString* co;
NSString* cb;
NSString* uo;
NSString* ub;

}

- (id) init;

@property (nonatomic, assign) int ID;
@property (nonatomic, retain) NSString* FName;
@property (nonatomic, retain) NSString* MName;
@property (nonatomic, retain) NSString* LName;
@property (nonatomic, retain) NSString* FullName;
@property (nonatomic, retain) NSString* DOB;
@property (nonatomic, retain) NSString* Occupation;
@property (nonatomic, retain) NSString* Employer;
@property (nonatomic, retain) NSString* Phone;
@property (nonatomic, retain) NSString* Fax;
@property (nonatomic, retain) NSString* Email;
@property (nonatomic, retain) NSString* Website;
@property (nonatomic, retain) NSString* Party;
@property (nonatomic, retain) NSString* TwitterUName;
@property (nonatomic, retain) NSString* TwitterHashTag;
@property (nonatomic, retain) NSString* Biography;
@property (nonatomic, retain) NSString* BiographyLink;
@property (nonatomic, retain) NSString* co;
@property (nonatomic, retain) NSString* cb;
@property (nonatomic, retain) NSString* uo;
@property (nonatomic, retain) NSString* ub;

@end

CCandidate.m:

#import "CCandidate.h"


@implementation CCandidate
@synthesize ID;
@synthesize FName;
@synthesize MName;
@synthesize LName;
@synthesize FullName;
@synthesize DOB;
@synthesize Occupation;
@synthesize Employer;
@synthesize Phone;
@synthesize Fax;
@synthesize Email;
@synthesize Website;
@synthesize Party;
@synthesize TwitterUName;
@synthesize TwitterHashTag;
@synthesize Biography;
@synthesize BiographyLink;
@synthesize co;
@synthesize cb;
@synthesize uo;
@synthesize ub;

-(id) init {
self = [super init];
ID = -1;
return self;
}

@end

最佳答案

您可能会在方法结束时或在取消分配 View 时释放currentCandidate。由于您没有保留 currentCandidate 对象,因此您也不应该释放它!

扫描您的代码以查找类似内容:[currentCandidate 版本]

请务必阅读有关内存管理的内容。这非常重要。

http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmRules.html

关于c - 关于 Objective-C 中指针的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1667254/

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