Kin*_*Bin 5 cocoa static-methods objective-c nsstring ios
我试图将md5字符串存储为类实例变量而不是实际密码.我有一个静态函数,它将返回一个md5字符串,我试图将其存储在实例变量而不是实际密码中.
我的类实例变量有以下setter:
-(void)setPassword:(NSString *)newpass{
if(newpass != password){
password = [utils md5HexDigest:newpass];
}
}
Run Code Online (Sandbox Code Playgroud)
这将传回正确的md5字符串并将其保存到我的init函数中的密码变量:[self setPassword:pword] ;.
如果我调用另一个实例方法并尝试访问self.password"我会得到"EXC_BAD_ACCESS".
我知道内存正在被释放,但我不知道确保它保持不变.
我已尝试使用自动释放的alloc init而没有运气.
这是在init期间调用的md5HexDigest函数(在另一个stackoverflow问题中很容易找到):
+ (NSString*)md5HexDigest:(NSString*)input {
const char* str = [input UTF8String];
unsigned char result[CC_MD5_DIGEST_LENGTH];
CC_MD5(str, strlen(str), result);
NSMutableString *ret = [NSMutableString stringWithCapacity:CC_MD5_DIGEST_LENGTH*2];
for(int i = 0; i<CC_MD5_DIGEST_LENGTH; i++)
[ret appendFormat:@"%02x",result[i]];
return ret;
}
Run Code Online (Sandbox Code Playgroud)
任何帮助/指针将不胜感激.我宁愿在内存中保存md5字符串,而不是每次需要使用密码时调用md5的实际密码.
提前致谢.
大卫和普华永道都是正确的,但遗漏了一个重要的细节。
setPassword:应该是copy入站参数。这都将确保
retain正如其他答案所暗示的那样,它被正确编辑了即类似:
-(void)setPassword:(NSString *)newpass{
[password release];
password = [[utils md5HexDigest: newpass] copy];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1085 次 |
| 最近记录: |