gpt4 book ai didi

iphone - 如何重用UILabel? (或任何物体)

转载 作者:行者123 更新时间:2023-12-03 21:24:38 25 4
gpt4 key购买 nike

这个:

    UILable *myLabel = [[UILabel alloc] init];
UILable *myLabel = [[UILabel alloc] init];

给我一​​个重新定义错误。

但是这个:

    for(i=0;i<5;i++)
{
UILable *myLabel = [[UILabel alloc] init];
// some label code here
[self.view addSubview:myLabel];
[myLabel release];
}

没有。那么第二个是假的吗?我应该先定义它然后重用它吗?

是这样吗:

 UIIMageView *Sign;
//Some Sign Stuff
Sign = [[UIImageView alloc]init];
Sign.image = [UIImage imageNamed:@"Minus.png"];
frame = CGRectMake(160 ,80, 64, 64);
Sign.frame = frame;
[scrollView addSubview:Sign];
Sign = nil;
[Sign release];
//Some other Sign stuff
Sign = [[UIImageView alloc]init];
Sign.image = [UIImage imageNamed:@"Plus.png"];
frame = CGRectMake(200 ,80, 64, 64);
Sign.frame = frame;
[scrollView addSubview:Sign];
Sign = nil;
[Sign release];

这是正确的吗?如果没有 Sign = nil,这将不起作用。所以看起来也有点不稳定。

最佳答案

同一 block 级作用域中不能使用相同的变量名称。因此,在您的第一个示例中,您不能拥有具有相同名称的变量定义,您必须以不同的方式命名它们。

- (void) method {
UIImageView* image1;

// here we define a new block scope. This can be a block of any kind (while, for, if)
{
// All reference in this block to this variable will see this definition.
UIImageView* image1;

// Using image1 here
}

// Here we see again the image1 defined at the beginning of the method.
}

在您的循环示例中,您处于一个新范围,每次迭代后都会重新初始化该范围。

你的第三个例子是正确的,因为它只定义了一次变量。之后您可以重用此变量来分配新对象。第三个不太优雅,因为您的变量名称不能很好地描述每种情况的目的。

对于“Sign = nil”的情况,这实际上使后面的行变得无用,因为在 Objective-C 中,发送到 nil 对象的消息将被忽略。

我建议定义一个方法,您可以调用该方法来创建看起来相同的图像。像这样的东西:

- (void) createImage:(NSString*) image frame:(CGRect) frame {
UIImageView *Sign;
Sign = [[UIImageView alloc]init];
Sign.image = [UIImage imageNamed:image];
Sign.frame = frame;
[self.scrollView addSubview:Sign];
[Sign release];
}

关于iphone - 如何重用UILabel? (或任何物体),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1497600/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com