开发者

Is there any way to create a UIButton which is not autoreleased, and still set it's UIButtonType?

UIButton has a single initializer buttonWithType. But this is a factory method and will create an autoreleased object. Of course we can do something like:

 UIButton *button = [[UIButton alloc] initWithFrame:CGRectMake(10, 10, 50, 30)];

But in this case i will not be able to set the button's type as buttonType is a read only property.

So is there any way i can create buttons which are not autoreleased and still set their type?

P. S. :

  1. Using AutoreleasePool with the autoreleased objects is a good practice. But i don't really have a problem with autoreleased objects. This is just a doubt.

  2. I am not looking for solution for any particular scenario so please don't reply with questions like "Why do you want this?". It just occurred to me that this is something i am 开发者_高级运维not able to do.. so i am asking..

Thanks, Swapnil


You can use the initializer and later send the object a retain message if you still need it.

I think that the reason for the lack of other initializers is that UIButtons are typically added as a subview somewhere and thus receive a retain message automatically.


No, only +buttonWithType: can create those special buttons. The reason why there isn't an +alloc/-init pair to construct such button is because they are actually implemented by some private subclass (e.g. UIRoundedRectButton).

If you need to retain the button, use -retain.

theButton = [[UIButton buttonWithType:foo] retain];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜