我需要子类UIButton,但是UIButton的设计使这非常痛苦。这是因为要创建一个真正需要调用的按钮:
[UIButton buttonWithType:UIButtonTypeRoundedRect]因此,如果我想要子类,那么我确实需要做这个方法所做的任何事情。但是,不可能设置基础类型的按钮。
一种选择是使用类似于装饰器和子类UIButton之类的东西,但将实际的按钮作为ivar,并将所有属性/方法调用推迟到此按钮。这里的问题是,我需要实现大部分的UIButton接口(哈欠)。
我所做的是在我的子类中做了一些更狡猾的事情。我创建了这个方法:
- (id) initWithType:(UIButtonType)buttonType
{
[super init];
actualButton = [[UIButton buttonWithType:buttonType] retain];
memcpy(self, actualButton, sizeof(UIButton));
self->isa = [ABDescriptorButton class];
return self ;
}我知道这是非常非正统的,但它的工作和相当干净的代码。我对这种方法可能会有什么缺陷呢?
发布于 2011-04-15 22:49:11
您不需要创建initWithType:方法。只需重写buttonWithType:工厂方法即可。
发布于 2011-03-11 16:44:50
我想我自己也意识到了这个问题。内存管理变得非常混乱,因为我们现在实际上正在跟踪两个实际上是同一个对象的对象。
https://codereview.stackexchange.com/questions/1249
复制相似问题