我的类实例变量有以下setter:
-(voID)setPassword:(Nsstring *)newpass{ if(newpass != password){ password = [utils md5HexDigest:newpass]; }}
这将传回正确的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;}
任何帮助/指针将不胜感激.我宁愿在内存中保存md5字符串,而不是每次需要使用密码时调用md5的实际密码.
提前致谢.
解决方法 DavID和pwc都是正确的,但遗漏了一个重要的细节.setPassword:应该复制入站参数.这将确保这一点
>它保持正确,因为其他答案暗示也是如此
> set字符串不再可变.
即:
-(voID)setPassword:(Nsstring *)newpass{ [password release]; password = [[utils md5HexDigest: newpass] copy];}总结
以上是内存溢出为你收集整理的Objective-C静态方法的结果保存到类实例变量,使用时给出“EXC_BAD_ACCESS”全部内容,希望文章能够帮你解决Objective-C静态方法的结果保存到类实例变量,使用时给出“EXC_BAD_ACCESS”所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)