Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 获取NSString变量的值_Iphone_Objective C_Nsstring - Fatal编程技术网

Iphone 获取NSString变量的值

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; 我有一个奇怪

我有个奇怪的问题。 pictureLink是在.h中声明的全局变量

 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;