Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.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
Objective c 设置属性时是否需要使用临时变量';价值_Objective C_Ios - Fatal编程技术网

Objective c 设置属性时是否需要使用临时变量';价值

Objective c 设置属性时是否需要使用临时变量';价值,objective-c,ios,Objective C,Ios,我有一个(保留的)UIImage属性,用于保存用户选择的图像 这是用户进行选择时我目前拥有的代码: - (IBAction) selectImage1 { UIImage *image = [UIImage imageNamed: @"image1-big.png"]; self.bigImage = image; } 但我想知道是否可以省略临时变量便利方法的使用,只需执行以下操作: - (IBAction) selectImage1 { self.bigImage

我有一个(保留的)UIImage属性,用于保存用户选择的图像

这是用户进行选择时我目前拥有的代码:

- (IBAction) selectImage1 {
    UIImage *image = [UIImage imageNamed: @"image1-big.png"];
    self.bigImage = image;
} 
但我想知道是否可以省略临时变量便利方法的使用,只需执行以下操作:

- (IBAction) selectImage1 {
    self.bigImage = [UIImage imageNamed: @"image1-big.png"];
} 
如果第二种方法有问题(我猜与内存管理有关),有人能解释一下吗


谢谢大家!

第二条路很好。行
UIImage*image=[UIImage imagename:@“image1 big.png”]为您提供一个自动释放的变量
图像
。通过
self.bigImage=image
将其分配给ivar将调用
bigImage
的setter方法,该方法保留该值。因此,行
self.bigImage=[UIImage ImageName:@“image1 big.png”]
相当于更详细的方式。

您发布的两个代码片段在内存管理方面没有区别;除非您对第一个代码段中两行之间的retain counts有具体的了解

在ARC环境中,局部变量将是一个“强”指针,但是当方法离开作用域时,它将被释放。在第二个代码段中,没有中间的retain/release指针,因此实际上可能会稍微高效一些

我看到第一个代码段的技巧是必要的,当您有一个弱指针(即弱@property)时,设置
self.foo=[UIView…
将立即允许释放它。在这些情况下,最好在使用它时使用局部变量保持它:

UIView *someFoo = [UIView...
[self addSubview:someFoo];
self.someWeakProperty = someFoo;
与之相比:

self.someWeakProperty = [UIView...
[self addSubview:self.someWeakProperty]; // it's already nil!!