Get all methods of an Objective-C class or instance

前端 未结 4 1244
醉梦人生
醉梦人生 2020-12-07 12:38

In Objective-C I can test whether a given class or instance responds to certain selectors. But how can query a class or instance for all its methods or properties of a class

4条回答
  •  一整个雨季
    2020-12-07 13:10

    In addition to Buzzy's answer, for debugging purposes you may use the -[NSObject _methodDescription] private method.

    Either in lldb:

    (lldb) po [[UIApplication sharedApplication] _methodDescription]
    

    or in code:

    @interface NSObject (Private)
    - (NSString*)_methodDescription;
    @end
    
    // Somewhere in the code:
    NSLog(@"%@", [objectToInspect performSelector:@selector(_methodDescription)]);
    

    Output will looks as following:

    <__NSArrayM: 0x7f9 ddc4359a0>:
    in __NSArrayM:
        Class Methods:
            + (BOOL) automaticallyNotifiesObserversForKey:(id)arg1; (0x11503b510)
            + (id) allocWithZone:(_NSZone*)arg1; (0x11503b520)
            + (id) __new:::::(const id*)arg1; (0x114f0d700)
        Instance Methods:
            - (void) removeLastObject; (0x114f669a0)
            - (void) dealloc; (0x114f2a8f0)
            - (void) finalize; (0x11503b2c0)
            - (id) copyWithZone:(_NSZone*)arg1; (0x114f35500)
            - (unsigned long) count; (0x114f0d920)
            - (id) objectAtIndex:(unsigned long)arg1; (0x114f2a730)
            - (void) getObjects:(id*)arg1 range:(_NSRange)arg2; (0x114f35650)
            - (void) addObject:(id)arg1; (0x114f0d8e0)
            - (void) setObject:(id)arg1 atIndex:(unsigned long)arg2; (0x114f99680)
            - (void) insertObject:(id)arg1 atIndex:(unsigned long)arg2; (0x114f0d940)
            - (void) exchangeObjectAtIndex:(unsigned long)arg1 withObjectAtIndex:(unsigned long)arg2; (0x114f8bf80)
            ......
    in NSMutableArray:
        Class Methods:
            + (id) copyNonRetainingArray; (0x11ee20178)
            + (id) nonRetainingArray; (0x11ee201e8)
            + (id) nonRetainingArray; (0x120475026)
            + (id) arrayWithCapacity:(unsigned long)arg1; (0x114f74280)
            ......
    

提交回复
热议问题