Dans un fichier global.h
Je déclare ensuite plus tardQuestion sur les pointeurs en Objective-C
dataManager *IdataManager;
lorsque le programme initialise I allouer et initialiser la variable, et l'utiliser dans plusieurs vues différentes comme un moyen d'accéder à un ensemble des données qui sont téléchargées lorsque l'application démarre.
Récemment, j'ai remarqué quand je tire l'un de mes points de vue, fermez-le, puis l'ouvrir à nouveau, je reçois un plantage lorsque j'essaie d'accéder à la IdataManager
globale.
Je suis finalement arrivé à la conclusion que son contenu était en train d'être publié d'une manière ou d'une autre par la vue qui était désinitialisée. Je regardais le seul endroit que j'utilisais la variable:
CCandidate *currentCandidate = [IdataManager CurrentCandidate];
Je changé ceci à dire:
CCandidate *currentCandidate = [[IdataManager CurrentCandidate] retain];
Je ne savais pas comment le mot-clé à retenir travaillé, mais il semblait comme si le vue vraiment libérait mes données, je devrais préciser dans la création de ce pointeur qu'il devrait être conservé.
Cela a corrigé le crash, mais je ne comprends pas vraiment pourquoi cela est arrivé. Est-ce que objective-c libère toujours les pointeurs que vous avez créés lorsque vous lui libérez le propriétaire? J'étais sous l'impression que je stockais simplement une adresse mémoire et que je lui donnais le nom 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
Apprenez à écrire une méthode d'initialisation correcte: http://www.mikeash.com/?page=pyblog/the-how-and-why-of-cocoa-initializers.html –
Comment initialisez-vous le global? variable? Je pense que cela pourrait être que cette variable est autoreleased. –
Après un rappel connectionDidFinishLoading, j'ai défini: IdataManager = [[dataManager alloc] initWithData: receivedData]; – Jameson