bool isSubclass(Class cls, Class superclass) { if (class_respondsToSelector(object_getClass(cls), @selector(isSubclassOfClass:))) { return [cls isSubclassOfClass:superclass]; } }
> Le 15 déc. 2014 à 16:49, Maxthon Chan <m...@maxchan.info> a écrit : > > But I still need some way to tell them from NSObject/NSProxy decedents from > my class walking. Any method calling will cause a crash there. > >> On Dec 15, 2014, at 23:48, Clark S. Cox III <clarkc...@gmail.com> wrote: >> >> That does not mean that they're using "Object" only that they're using a >> base class other than "NSObject" or "NSProxy". Why can't you just ignore >> such classes? >> >> Sent from my iPhone >> >> On Dec 14, 2014, at 23:31, Maxthon Chan <m...@maxchan.info >> <mailto:m...@maxchan.info>> wrote: >> >>> My class scanning returned several OS* classes that does not conform to >>> NSObject protocol. >>> >>>> On Dec 15, 2014, at 00:29, Clark S. Cox III <clarkc...@gmail.com >>>> <mailto:clarkc...@gmail.com>> wrote: >>>> >>>>> >>>>> On Dec 13, 2014, at 11:57, Maxthon Chan <m...@maxchan.info >>>>> <mailto:m...@maxchan.info>> wrote: >>>>> >>>>> NSProxy checking actually work, but throwing those classes that derive >>>>> from Object class (note I used capitalised O here, the old Object class >>>>> from early NeXT times, also used heavily in OS X kernel, GCD and Mach >>>>> ports) >>>> >>>> What makes you think that Object is used in *any* of those places? >>>> >>>>> into the mix means that no method can be sent before class is determined. >>>>> I would suggest Apple add one runtime function class_isSubclassOfClass() >>>>> that mirrors the functionality of NSObject and NSProxy method >>>>> isSubclassOfClass so that derivatives of the old Object class can be >>>>> detected more easily. >>>>> >>>>>> On Dec 14, 2014, at 03:49, Gary L. Wade <garyw...@desisoftsystems.com >>>>>> <mailto:garyw...@desisoftsystems.com>> wrote: >>>>>> >>>>>> Are you saying that Apple's well-documented approach to see if an object >>>>>> is derived from NSProxy does not work? If that's the case, you need to >>>>>> submit a bug report to Apple. That's a serious issue that only Apple can >>>>>> help you with. >>>>>> >>>>>> If you are using objects not derived from NSObject nor NSProxy, then >>>>>> change your design. >>>>>> -- >>>>>> Gary L. Wade (Sent from my iPad) >>>>>> http://www.garywade.com/ <http://www.garywade.com/> >>>>>> >>>>>>> On Dec 13, 2014, at 11:40 AM, Maxthon Chan <m...@maxchan.info >>>>>>> <mailto:m...@maxchan.info>> wrote: >>>>>>> >>>>>>> Ain’t work! Will crash if an Object derivative showed up. >>>>>>> >>>>>>> I am scanning ALL loaded classes and only subclasses of a certain class >>>>>>> is interested. But due to the nature of this class scanning before I >>>>>>> can make sure that the class derives from NSObject I cannot call any >>>>>>> method on it. >>>>>>> >>>>>>>> On Dec 14, 2014, at 03:34, Gary L. Wade <garyw...@desisoftsystems.com >>>>>>>> <mailto:garyw...@desisoftsystems.com>> wrote: >>>>>>>> >>>>>>>> If all you care about is if an object is a proxy or not, look at >>>>>>>> isProxy. >>>>>>>> -- >>>>>>>> Gary L. Wade (Sent from my iPad) >>>>>>>> http://www.garywade.com/ <http://www.garywade.com/> >>>>>>>> >>>>>>>>> On Dec 13, 2014, at 11:06 AM, Maxthon Chan <m...@maxchan.info >>>>>>>>> <mailto:m...@maxchan.info>> wrote: >>>>>>>>> >>>>>>>>> What I am doing here is scanning all loaded classes for subclasses of >>>>>>>>> a certain class. Before any NSObject method can be issued I have to >>>>>>>>> check if it is actually NSObject or NSProxy derivative instead of an >>>>>>>>> Object derivative that does not support NSObject methods. This calls >>>>>>>>> for runtime equivalent for one of the following NSObject methods: >>>>>>>>> >>>>>>>>> - [NSObject respondsToSelector:(SEL)aSelector] = >>>>>>>>> class_respondsToSelector(Class, SEL) // this crashed. >>>>>>>>> + [NSObject conformsToProtocol:(Protocol *)aProtocol] = >>>>>>>>> class_conformsToProtocol(Class, Protocol *) // check for NSObject >>>>>>>>> protocol, this does not work. >>>>>>>>> + [NSObject isSubclassOfClass:(Class)aClass] // no equivalent, have >>>>>>>>> to implement it myself >>>>>>>>> >>>>>>>>> I ended up creating this: >>>>>>>>> >>>>>>>>> BOOL class_isSubclassOfClass(Class cls, Class other) >>>>>>>>> { >>>>>>>>> for (Class c = cls; c; c = class_getSuperclass(c)) >>>>>>>>> if (c == other) >>>>>>>>> return YES; >>>>>>>>> return NO; >>>>>>>>> } >>>>>>>>> >>>>>>>>> If i remembered it right GNUstep runtime have this function. I will >>>>>>>>> file a bug report to Apple and ask them to add this, as it is useful >>>>>>>>> in class scanning and i am using this technique heavily in jailbreak >>>>>>>>> detection. >>>>>>>>> >>>>>>>>>> On Dec 14, 2014, at 01:20, Kyle Sluder <k...@ksluder.com >>>>>>>>>> <mailto:k...@ksluder.com>> wrote: >>>>>>>>>> >>>>>>>>>> On Sat, Dec 13, 2014, at 10:19 AM, Phillip Mills wrote: >>>>>>>>>>> Why do you think the problem is with “respondsToSelector:”? The >>>>>>>>>>> error >>>>>>>>>>> says you’re accessing past the end of a string. >>>>>>>>>> >>>>>>>>>> Because the crash happens in a call stack that originates in >>>>>>>>>> class_respondsToSelector, and involves none of Maxthon's code. >>>>>>>>>> >>>>>>>>>> --Kyle Sluder >>>>>>> >>>>> >>>>> _______________________________________________ >>>>> >>>>> Cocoa-dev mailing list (Cocoa-dev@lists.apple.com >>>>> <mailto: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 >>>>> <http://lists.apple.com/> >>>>> >>>>> Help/Unsubscribe/Update your Subscription: >>>>> https://lists.apple.com/mailman/options/cocoa-dev/clarkcox3%40gmail.com >>>>> <https://lists.apple.com/mailman/options/cocoa-dev/clarkcox3%40gmail.com> >>>>> >>>>> This email sent to clarkc...@gmail.com <mailto:clarkc...@gmail.com> > > _______________________________________________ > > 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: > https://lists.apple.com/mailman/options/cocoa-dev/mailing%40xenonium.com > > This email sent to mail...@xenonium.com _______________________________________________ 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: https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com This email sent to arch...@mail-archive.com