我正在经历一些奇怪的行为,我想知道你是否可以向我解释发生了什么。
我有以下代码
@implementation BAClient
NSString* _host = @"localhost:3000";
-(id)init{
self = [super init];
if(self){
//where the weird stuff happens
NSString* str =[NSString stringWithFormat:@"%@/api", _host];
_connection = [[BAConnectionManager alloc] initWithHost: str];
}
return self;
}
@end
在第一行代码运行之后(在注释之后) - _host等于localhost:3000。当下一行代码运行时,它等于localhost:3000 / api。
无论BAConnnectionManager构造函数代码的代码如何 - 这是我不会期望的行为 - 因为我认为stringWithFormat会创建一个新字符串,即使有其他神奇的方式stringWithFormat工作,也没有指向_host的指针被发送给构造函数。
任何方式BAConnectionManager构造函数:
@implementation BAConnectionManager
NSString* _host;
-(id) initWithHost:(NSString*)host{
self = [super init];
if(self){
_host = host;
_requestSuccessHandlers = [[NSMutableDictionary alloc] init];
_requestFailureHandlers = [[NSMutableDictionary alloc] init];
}
return self;
}
@end
这两个文件位于两个不同的文件上,因此_host存在于两个文件中不应该是一个问题,或者至少它会是一个非常奇怪的行为,因为它们是在两个完全不同的类上定义的。
我的印象是这里确实存在歧义,但我无法弄明白为什么
答案 0 :(得分:0)
我已经知道了,因为我是Objective C的新手我愚蠢地认为你创建了私人类成员,只是在@implemintation和@end之间 - 任何修复它的方式:
@implementation BAClient{
NSString* _host;
}
-(id)init{
self = [super init];
if(self){
//where the weird stuff happens
_host = = @"localhost:3000";
NSString* str =[NSString stringWithFormat:@"%@/api", _host];
_connection = [[BAConnectionManager alloc] initWithHost: str];
}
return self;
}
@end
和
@implementation BAConnectionManager{
NSString* _host;
}
-(id) initWithHost:(NSString*)host{
self = [super init];
if(self){
_host = host;
_requestSuccessHandlers = [[NSMutableDictionary alloc] init];
_requestFailureHandlers = [[NSMutableDictionary alloc] init];
}
return self;
}
@end