获取NSString变量的值

时间:2011-12-14 14:20:36

标签: iphone objective-c nsstring

我有一个奇怪的问题。 pictureLink是在.h

中声明的全局变量
 NSString *pictureLink;
}
@property(retain,nonatomic) NSString *pictureLink;

我写了这段代码

NSString * myPictureUrl=[NSString stringWithFormat:@"http://mywebsite.com/uploads/%@.jpg",hash];
pictureLink=myPictureUrl;

我有一个奇怪的结果,它必须是一个指针 或者

pictureLink=[NSString stringWithFormat:@"http://mywebsite.com/uploads/%@.jpg",hash];

我有EXC_BAD_ACESS错误

2 个答案:

答案 0 :(得分:6)

这是内存管理故障,您没有在代码中保留myPictureUrl

[NSString stringWithFormat:@"http://mywebsite.com/uploads/%@.jpg",hash];会返回自动释放的值,因此您有两个选项:

  1. pictureLink=myPictureUrl;应该看起来像[self setPictureLink:myPictureUrl];
  2. 执行[myPictureUrl retain];,不要忘记稍后release
  3. 考虑为您的项目使用ARC(自动保留计数)。使用ARC,编译器会处理保留计数,因此实际上不允许这样做。有一个重构将转换当前项目。

答案 1 :(得分:2)

您通过直接调用变量来绕过@property,因此magic设置未提供@property,例如保留和释放。
您需要self.pictureLink才能使用@property 为了避免直接访问我的变量的诱惑,我执行以下操作

NSString *theProperty
}
@property (nonatomic, retain) NSString *property;

@synthesise property = theProperty;

这样,如果我绕过@property,我真的很想做到这一点 但是你需要一个非常非常非常好的理由这样做,然后事件,这可能不是一个足够好的理由。