Objective-C静态方法的结果保存到类实例变量,使用时给出“EXC_BAD_ACCESS”

Objective-C静态方法的结果保存到类实例变量,使用时给出“EXC_BAD_ACCESS”,第1张

概述我试图将md5字​​符串存储为类实例变量而不是实际密码.我有一个静态函数,它将返回一个md5字符串,我试图将其存储在实例变量而不是实际密码中. 我的类实例变量有以下setter: -(void)setPassword:(NSString *)newpass{ if(newpass != password){ password = [utils md5HexDigest:newpass]; 我试图将md5字​​符串存储为类实例变量而不是实际密码.我有一个静态函数,它将返回一个md5字符串,我试图将其存储在实例变量而不是实际密码中.

我的类实例变量有以下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”所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1005474.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-22
下一篇 2022-05-22

发表评论

登录后才能评论

评论列表(0条)

保存