我想首先指出,其實我們「可以」爲什麼我們無法在類別中添加iVar?
只需使用相關對象:
@implementation UIButton (BGButtonWithImages)
static char UIB_ImageOfButton;
-(void)setImageObject:(Image *)imageObject
{
objc_setAssociatedObject(self, &UIB_ImageOfButton, imageObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(Image*)imageObject
{
return (Image*)objc_getAssociatedObject(self, &UIB_ImageOfButton);
}
@end
但是,這導致了另一個問題。爲什麼使用關聯對象很容易完成的事情不能定期完成?爲什麼蘋果不在這樣的類別中實現屬性?
因此,如果你想在類別中的屬性,你只需要自己實現的東西?嗯...蘋果本來可以自動做出這個。 –
如果相同的實例變量可能被另一個類別添加,那麼可以在編譯時將它們排序出來嗎? –
@SharenEayrs不,它不能。雖然這個功能對iOS開發人員不是開放的,但類別可以在運行時動態加載。在編譯任何一個類別時,您不知道還有哪些其他類別。這已經導致另一個問題 - 你不能確定性地將一個類的方法替換成一個類別,因爲它可能也被替換爲另一個類別。 – 2012-12-05 09:17:24