Iphone 获取NSString变量的值
我有个奇怪的问题。 pictureLink是在.h中声明的全局变量Iphone 获取NSString变量的值,iphone,objective-c,nsstring,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; 我有一个奇怪
NSString *pictureLink;
}
@property(retain,nonatomic) NSString *pictureLink;
我写了这段代码
NSString * myPictureUrl=[NSString stringWithFormat:@"http://mywebsite.com/uploads/%@.jpg",hash];
pictureLink=myPictureUrl;
我有一个奇怪的结果,一定是指针
或
我有EXC_BAD_access错误这是内存管理错误,您没有在代码中保留
myPictureUrl
[NSString stringWithFormat:@”http://mywebsite.com/uploads/%@.jpg“,hash]代码>返回自动释放的值,因此您有两个选项:
pictureLink=myPictureUrl代码>应类似于[self-setPictureLink:myPictureUrl]代码>
做一个[myPictureUrl retain]代码>,不要忘记以后发布它
考虑为您的项目使用ARC(自动保留计数)。对于ARC,编译器负责保留计数,因此您不必这样做,事实上不允许这样做。有一个重构将转换当前项目。您通过直接调用变量绕过了@property
,因此不会执行@property
设置提供的魔法,如保留和释放。
您需要执行self.pictureLink
才能使用@属性
为了避免直接访问变量的诱惑,我执行以下操作
NSString *theProperty
}
@property (nonatomic, retain) NSString *property;
及
这样,如果我绕过@属性
我真的真的真的很想这么做。
但是您需要一个非常、非常、非常好的理由来这样做,然后,这可能不是一个足够好的理由。如果有一个属性,请不要对其进行编码,请使用属性设置器/获取器。直接分配给pictureLink
将导致pictureLink
当前指向的对象内存泄漏@Andrey thank you work perfect。这是我的第一个应用程序,我从未发布过object:D它会给我带来问题吗?@Mehdi:当然,你需要在-(void)dealloc
方法中释放所有retain
/strong
属性ivar。@VinceBum也可以直接分配给ivar,不会释放它指向的任何以前的对象。@CocoaFu,是绕过@property
是错误的。更常见的是,下划线“\ux”被用来代替“the”。例如:@synthesis属性=\u属性代码>。但是property
确实工作得很好。@CocoaFu是的,我最近看到了很多,我想知道Apple指令的附加是什么,它声明他们在内部为there变量使用了_属性,这样我们就应该避免它们,以避免可能的冲突。在IVAR前面加下划线是可以的,编译器将捕获任何冲突。不确定的是在方法名称前面加下划线。这在某种程度上是最佳实践的一个变化,您偶尔会看到带有带下划线前缀的IVAR的Apple示例代码。如果可能,使用ARC,编译器将在幕后处理所有保留计数。
NSString *theProperty
}
@property (nonatomic, retain) NSString *property;
@synthesise property = theProperty;