Am not sure how to put this, and I couldn’t find the answer because of my inability to find the words to express what am looking for. (!)
In Java, I used to do something like this (I don’t remember):
JPanel myButton = new JPanel("Press me"){
public void add(JComponent component){
//override add method
}
};
But, i couldn’t find how to do this in Objective-C .. What I found in my search was categories and weird ^{} symbols …
So, how can I override method(s) in a newly created object?
(For example, override -(BOOL)isEqual; in a newly created NSString* ?)
Am sorry if the question is a bit vague..
EDIT:
Obviously, without subclassing 🙂
EDIT:
Might as well post my problem in case someone has a better idea:
I have a few CCTransitions in COCOS2D, and I want to be notified when the transition ends .. The thing is, as soon as the transition ends, the -(void)finish; method is invoked (which is part of the CCTransition class structure)
I would really want to avoid subclassing the CCTransition class, and override the finish method to do my logic when the transition ends 🙂
EDIT:
-(void)onEnterTransitionDidFinish; … I can’t believe something as awesome as that existed and I haven’t came across it while searching……
Which means, instead of subclassing CCTransition, override this method in my CCNode subclass :D!
What you have there in Java is an anonymous subclass. This is not possible in Objective-C (well, it sort of is but you would have to do some pretty involved contortions with the Obj-C runtime library).
But Objective-C as of iOS 4 or OS X 10.6 has “blocks”, which is what the
^{}syntax is for. This is Objective-C’s notion of a closure. This isn’t going to help you directly if the APIs that you’re calling don’t support block callbacks, but you may be able to create wrapper classes that use blocks instead of subclassed methods to handle callbacks.There are many resources for learning about blocks in Objective-C.