2

我有一系列按钮,每个按钮都使用不同的图像。我可以重复使用如下所示的保留变量:

// 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];

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

4

1 回答 1

3

你在那里的东西会泄漏(因为你失去了对第一张图片的引用)和崩溃(因为你release是一个你不拥有的对象)。如果您删除-retain-release,您的代码将正常工作。

于 2010-04-17T21:12:43.983 回答