objective-c - 保留、重用、释放?

标签 objective-c retain

我有一系列按钮,每个按钮都使用不同的图像。我可以像下面这样重用保留变量吗:

// set images
UIImage *image = [[dice1 backgroundImageForState:UIControlStateHighlighted] retain];
[dice1 setBackgroundImage:image forState:(UIControlStateHighlighted|UIControlStateSelected)];
image = [dice2 backgroundImageForState:UIControlStateHighlighted];
[dice2 setBackgroundImage:image forState:(UIControlStateHighlighted|UIControlStateSelected)];
image = [dice3 backgroundImageForState:UIControlStateHighlighted];
[dice3 setBackgroundImage:image forState:(UIControlStateHighlighted|UIControlStateSelected)];
image = [dice4 backgroundImageForState:UIControlStateHighlighted];
[dice4 setBackgroundImage:image forState:(UIControlStateHighlighted|UIControlStateSelected)];
image = [dice5 backgroundImageForState:UIControlStateHighlighted];
[dice5 setBackgroundImage:image forState:(UIControlStateHighlighted|UIControlStateSelected)];
image = [dice6 backgroundImageForState:UIControlStateHighlighted];
[dice6 setBackgroundImage:image forState:(UIControlStateHighlighted|UIControlStateSelected)];
[image release];

或者我是否需要为传递给每个按钮的 setBackgroundImage: 的每个图像创建一个新的 UIImage 并依赖自动释放而不是保留的 UIImage。上面的方法有效,但我不确定将每个按钮的图像设置为同一图像将如何影响保留计数。

最佳答案

你所拥有的将会泄漏(因为你失去了对第一个图像的引用)并崩溃(因为你释放一个不属于你的对象)。如果删除 -retain-release,您的代码将正常工作。

关于objective-c - 保留、重用、释放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2659937/

相关文章:

cocoa - NSObject的retain方法是原子的吗?

iOS View 保留数据

objective-c - +初始化调用不止一次

ios - 如何将 NSDictionary 类型的对象添加到包含 NSDictionaryResultType 对象的 NSMutableArray?

iphone - 如何在不执行 alloc 的情况下获取 NSNumber,以便它响应 initWithInt?

ios - 为什么要为 subview 设置保留在@property 上?

objective-c - 是否可以在iOS5中确定iPhone 4s的网络类型(GSM/CDMA)

objective-c - XCUI 测试 : How does test collection happen

ios - Swift:如何注销保留对象数?