Bonjour à tous
j'essaye CLang sur les conseils d'un ami.
est ce que vous pourriez m'aider à déchiffrer cette erreur svp :
A:
B.h
B.m
l'analyseur me dit qu'il y a une erreur à la création de b
Method returns an Objective-C object with a +0 retain count (non-owning reference)
et une autre au moment du release de b.
Incorrect decrement of the reference count of an object is not owned at this point by the caller
seulement je m'arrache les cheveux et ne comprends pas
en effet, si je remplace init_with
A*) aa par un init seul (le même que dans A), et que j'ai une méthode setToto
A*) aa { iff (toto != aa) [toto release] toto =[aa retain]}
et que je fais ça, je n'obtiens plus d'erreur, alors que ça m'a tout l'air d'être le même code... ????
je serais ravi de comprendre ce qui se passe
merci d'avance
Thomas
---------- Nouveau message ajouté à 23h18 ---------- Le message précédent a été envoyé à 22h43 ----------
et information supplémentaire : si j'avais appelé ma fonction -(id) init
A*) aa au lieu de init_with
A*) aa, ça aurait marché
ce qui mène à une autre question ???
on ne peut plus nommer le premier argumetn de init alors ?
-(id) init: avec_a
A*) aa;
est toléré dans l'interface, par contre on ne peut plus l'appeler !
B* b = [[B alloc] init: avec_a:aa]; interdit : 'avec_a' first use in this function
bref plus je crois comprendre moins je comprends...
aidez moi !!
merci
j'essaye CLang sur les conseils d'un ami.
est ce que vous pourriez m'aider à déchiffrer cette erreur svp :
A:
Bloc de code:
#import "A.h"
@implementation A
-(id) init {
if (self = [super init])
;
return self;
}
@end
B.h
Bloc de code:
#import <Cocoa/Cocoa.h>
#import "A.h"
@interface B : A {
A* toto;
}
-(id) init;
-(id) init_with:(A*) aa;
@end
B.m
Bloc de code:
#import "B.h"
@implementation B
-(id) init_with:(A*) aa {
if (self = [super init]) {
if (toto != aa) {
[toto release];
toto = [aa retain];
}
}
return self;
}
-(void) dealloc {
[toto release];
[super dealloc];
}
@end
main
[CODE]
#import <Cocoa/Cocoa.h>
#import "A.h"
#import "B.h"
int main(int argc, char *argv[]) {
A* a = [[A alloc] init];
B* b = [[B alloc] init_with:a];
[a release];
[b release];
return NSApplicationMain(argc, (const char **) argv);
}
l'analyseur me dit qu'il y a une erreur à la création de b
Method returns an Objective-C object with a +0 retain count (non-owning reference)
et une autre au moment du release de b.
Incorrect decrement of the reference count of an object is not owned at this point by the caller
seulement je m'arrache les cheveux et ne comprends pas
en effet, si je remplace init_with
et que je fais ça, je n'obtiens plus d'erreur, alors que ça m'a tout l'air d'être le même code... ????
je serais ravi de comprendre ce qui se passe
merci d'avance
Thomas
---------- Nouveau message ajouté à 23h18 ---------- Le message précédent a été envoyé à 22h43 ----------
et information supplémentaire : si j'avais appelé ma fonction -(id) init
ce qui mène à une autre question ???
on ne peut plus nommer le premier argumetn de init alors ?
-(id) init: avec_a
est toléré dans l'interface, par contre on ne peut plus l'appeler !
B* b = [[B alloc] init: avec_a:aa]; interdit : 'avec_a' first use in this function
bref plus je crois comprendre moins je comprends...
aidez moi !!