On Mar 24, 2011, at 9:49 PM, John Engelhart wrote: > I'm not 100% certain that the from / to MetaClass bits are needed as they > are probably redundant / unnecessary with the later class_getClassMethod / > class_getInstanceMethod calls (i.e., they probably automatically do the > exact same meta class checks).
class_getInstanceMethod(cls) is defined as class_getClassMethod(object_getClass(cls)). > I am using class_replaceMethod, which for now isn't a problem since I'm > assuming a "modern" 10.5+ runtime. I can't find a handy reference for the > minimum version of iOS that this function is supported (I'm sort of assuming > "all" as it started as a "modern" objc abi). If, for some reason, < 10.5 / > "modern" ObjC run time support is required, I suppose I could hack up > class_replaceMethod equivalent behavior, but this isn't a pressing issue > right now. iOS 2.0+ (i.e. all iOS since the introduction of the SDK) supports the modern runtime. > Anyone from Apple want to comment on how kosher this is likely to be for an > iOS / iPhone / iPad app? I ask because the three20 framework started to > cause rejections due to its use of method swizzling. However, in the > three20 case, they were clearly doing something that was borderline > questionable (I think they swizzled -dealloc of -UIView or something to > their own -dealloc replacement to hack in behavior?). I'm not doing > anything like that, it's a fairly legitimate (at least, IMHO) use of > swizzling, and I'm only swizzling over the immutable methods that I've > written code for- I'm not overriding / swizzling the NSArray / > NSMutableArray methods at all- the swizzling only happens to my (mutable) > classes methods. As I understand it, swizzling your own classes and methods is allowed, but swizzling to replace system methods is not. > Can anyone think of corner cases in which these would not behave > "identically" to their respective concrete Cocoa versions? One edge case of copying methods from one class to another is calls to [super ...]. The super dispatch will be directed to the superclass of the class that originally implemented the method. If the original class and the copied-to class do not have the same superclass, you will get unexpected results in the copied-to class. -- Greg Parker gpar...@apple.com Runtime Wrangler _______________________________________________ Cocoa-dev mailing list (Cocoa-dev@lists.apple.com) Please do not post admin requests or moderator comments to the list. Contact the moderators at cocoa-dev-admins(at)lists.apple.com Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com