我有一个奇怪的问题。 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错误
答案 0 :(得分:6)
这是内存管理故障,您没有在代码中保留myPictureUrl
。
[NSString stringWithFormat:@"http://mywebsite.com/uploads/%@.jpg",hash];
会返回自动释放的值,因此您有两个选项:
pictureLink=myPictureUrl;
应该看起来像[self setPictureLink:myPictureUrl];
。[myPictureUrl retain];
,不要忘记稍后release
。考虑为您的项目使用ARC(自动保留计数)。使用ARC,编译器会处理保留计数,因此实际上不允许这样做。有一个重构将转换当前项目。
答案 1 :(得分:2)
您通过直接调用变量来绕过@property
,因此magic
设置未提供@property
,例如保留和释放。
您需要self.pictureLink
才能使用@property
为了避免直接访问我的变量的诱惑,我执行以下操作
NSString *theProperty
}
@property (nonatomic, retain) NSString *property;
和
@synthesise property = theProperty;
这样,如果我绕过@property
,我真的很想做到这一点
但是你需要一个非常非常非常好的理由这样做,然后事件,这可能不是一个足够好的理由。