使用帮助器方法创建UIButton

时间:2010-12-31 22:13:19

标签: iphone objective-c ios uikit uibutton

我有一个UITableView的子类,其中我想生成多个共享相同属性的标签(font,textColor,backgroundColor等)。

我认为实现这一目标的最简单方法是创建一个帮助方法,该方法创建一个具有一些常见属性集的标签:

- (UILabel *)defaultLabelWithFrame:(CGRect)frame {
    UILabel *label = [[UILabel alloc] initWithFrame:frame];
    label.font = [UIFont fontWithName:@"Helvetica" size:14];
    label.textColor = [UIColor colorWithWhite:128.0/255.0 alpha:1.0];
    label.backgroundColor = [UIColor clearColor];

    return label;
}

我使用这样的方法:

UILabel *someLabel = [self defaultLabelWithFrame:CGRectMake(0,0,100,100)];
[self addSubview:someLabel];
[someLabel release];

我关注的是在方法中创建标签时保留它,但是当我将其分配给someLabel时,它会再次保留,并且在方法中创建时无法释放内存< /强>

这里最好的方法是什么?

我觉得我有两个选择:

  1. 为默认标签类型创建UILabel的子类。
  2. 创建一个名为 defaultLabels 的NSMutableArray并将标签存储在:    
- (UILabel *)defaultLabelWithFrame:(CGRect)frame {
    UILabel *label = [[UILabel alloc] initWithFrame:frame];
    label.font = [UIFont fontWithName:@"Helvetica" size:14];
    label.textColor = [UIColor colorWithWhite:128.0/255.0 alpha:1.0];
    label.backgroundColor = [UIColor clearColor];

    [defaultLabels addObject:label];
    [labels release]; //I can release here
    return [defaultLabels lastObject]; //I can release defaultLabels when done
}

我很感激你的想法。欢呼声。

1 个答案:

答案 0 :(得分:4)

您需要在退回之前自动释放您的对象:

- (UILabel *)defaultLabelWithFrame:(CGRect)frame
{
   …
   return [label autorelease];
}

Cocoa中的大多数方法都会根据需要保留对象,包括addSubview:。如果没有对象使用(即保留)标签,您不必担心它被泄露 - 它已被添加到自动释放池中并将自动释放。