所以这是我的场景——在我做的一个类的头文件中:
@interface MyClass : NSObject
{
NSString *string1;
NSString *string2;
}
- (void) methodOne: (NSString *) passedString;
- (void) methodTwo: (NSString *) passedString;
@end
在实现文件中,我这样做:
#import MyClass.h
@implementation MyClass
- (void) methodOne: (NSString *) passedString
{
NSLog(@"%@", passedString);
string1 = passedString;
}
- (void) methodTwo: (NSString *) passedString
{
NSLog(@"%@", passedString);
string2 = passedString;
}
我发现在执行此操作时与 [NSString alloc] initWithString:] 存在某种不一致。
如您所见, string1 和 string2 的处理方式完全相同,但发生的是 string1 正在设置,但 string2 仍然为空。当我稍后引用它时,我得到了一个错误的访问权限。
我想也许我正在将一个空字符串传递给methodTwo:所以我添加了证明它不是空的NSLog,但具有预期的字符串。
由于我在决定更改为之前已经注意到这种不一致:
- (void) methodOne: (NSString *) passedString
{
NSLog(@"%@", passedString);
string1 = passedString;
}
- (void) methodTwo: (NSString *) passedString
{
NSLog(@"%@", passedString);
string2 = [[NSString alloc] initWithString: passedString];
}
现在两个字符串都按预期工作。我的问题是为什么会出现这种不一致?
这不是我唯一一次发生这种情况。它发生在各种物体上。唯一似乎每次都有效的是alloc init。像 stringWithString: 这样的方法大部分时间都有效,但并非总是如此。