📜 ⬆️ ⬇️

Private debugging methods

Surely everyone already knows that UIView has a useful recursiveDescription method.
Calling which will return a string describing the entire hierarchy.

(lldb) po [[self view] recursiveDescription] <UIView: 0x6a107c0; frame = (0 20; 320 460); autoresize = W+H; layer = […] | <UIRoundedRectButton: 0x6a103e0; frame = (124 196; 72 37); opaque = NO; […] | | <UIButtonLabel: 0x6a117b0; frame = (19 8; 34 21); text = 'Test'; […] ..... 

Many people know that with the help of runtime, you can get a list of variables / methods / properties / protocols / ... class. And usually for this purpose they write auxiliary code. But it turns out, everything has long been written by Apple employees. UIKit.framework has a category called IvarDescription.

 @interface NSObject (IvarDescription) - (id)_shortMethodDescription; - (id)_methodDescription; - (id)__methodDescriptionForClass:(Class)arg1; - (id)_ivarDescription; - (id)__ivarDescriptionForClass:(Class)arg1; @end 

The names of the metds speak for themselves. But let's see what they return.

')
_methodDescription - all methods of the object, divided into classes from which they are inherited

 (lldb) po [UIApplication _methodDescription] <UIApplication: 0x8d83400>: in UIApplication: Class Methods: + (BOOL) registerAsSystemApp; (0x2378c5) + (BOOL) rendersLocally; (0x2378d7) + (void) _startWindowServerIfNecessary; (0x230e26) + (void) _startStatusBarServerIfNecessary; (0x230f9a) + (int) statusBarStyleForString:(id)arg1; (0x23c19d) + (int) _backgroundStyleForString:(id)arg1; (0x23c39e) + (BOOL) _isBackgroundStyleTransparent:(int)arg1; (0x23c4e0) + (int) interfaceOrientationForString:(id)arg1; (0x23c4ef) + (BOOL) isRunningInStoreDemoMode; (0x22abcb) + (BOOL) shouldMakeUIForDefaultPNG; (0x22ac29) + (void) _noteInterfaceOrientationChangingTo:(int)arg1; (0x22be17) + (void) _installAfterCACommitHandler; (0x22d45f) + (BOOL) _isAfterCACommitHandlerInstalled; (0x22d512) + (BOOL) isRunningEventPump; (0x237848) + (id) stringForStatusBarStyle:(int)arg1; (0x23c169) + (id) stringForInterfaceOrientation:(int)arg1; (0x23c5d9) + (void) registerObjectForStateRestoration:(id)arg1 restorationIdentifier:(id)arg2; (0x8e6863) + (id) sharedApplication; (0x22a2b0) Properties: @property (nonatomic, getter=isProximitySensingEnabled) BOOL proximitySensingEnabled; @property (nonatomic) <UIApplicationDelegate>* delegate; @property (nonatomic, getter=isIdleTimerDisabled) BOOL idleTimerDisabled; @property (readonly, nonatomic) UIWindow* keyWindow; @property (readonly, nonatomic) NSArray* windows; @property (nonatomic, getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; @property (nonatomic) int statusBarStyle; @property (nonatomic, getter=isStatusBarHidden) BOOL statusBarHidden; @property (nonatomic) int statusBarOrientation; @property (readonly, nonatomic) double statusBarOrientationAnimationDuration; @property (readonly, nonatomic) CGRect statusBarFrame; @property (nonatomic) int applicationIconBadgeNumber; @property (nonatomic) BOOL applicationSupportsShakeToEdit; @property (readonly, nonatomic) int applicationState; @property (readonly, nonatomic) double backgroundTimeRemaining; @property (readonly, nonatomic) int backgroundRefreshStatus; @property (readonly, nonatomic, getter=isProtectedDataAvailable) BOOL protectedDataAvailable; @property (readonly, nonatomic) int userInterfaceLayoutDirection; @property (readonly, nonatomic) NSString* preferredContentSizeCategory; @property (copy, nonatomic, setter=_setPreferredContentSizeCategoryName:) NSString* preferredContentSizeCategoryName; (@synthesize preferredContentSizeCategoryName = _preferredContentSizeCategoryName;) @property (nonatomic, getter=_lastTimestampWhenFirstTouchCameDown, setter=_setLastTimestampWhenFirstTouchCameDown:) double lastTimestampWhenFirstTouchCameDown; (@synthesize lastTimestampWhenFirstTouchCameDown = _lastTimestampWhenFirstTouchCameDown;) @property (nonatomic, getter=_lastTimestampWhenAllTouchesLifted, setter=_setLastTimestampWhenAllTouchesLifted:) double lastTimestampWhenAllTouchesLifted; (@synthesize lastTimestampWhenAllTouchesLifted = _lastTimestampWhenAllTouchesLifted;) @property (nonatomic, getter=_lastLocationWhereFirstTouchCameDown, setter=_setLastLocationWhereFirstTouchCameDown:) CGPoint lastLocationWhereFirstTouchCameDown; (@synthesize lastLocationWhereFirstTouchCameDown = _lastLocationWhereFirstTouchCameDown;) @property (nonatomic, getter=_lastLocationWhereAllTouchesLifted, setter=_setLastLocationWhereAllTouchesLifted:) CGPoint lastLocationWhereAllTouchesLifted; (@synthesize lastLocationWhereAllTouchesLifted = _lastLocationWhereAllTouchesLifted;) Instance Methods: - (int) statusBarOrientation; (0x236147) - (int) alertInterfaceOrientation; (0x247f45) - (void) startedTest:(id)arg1; (0x38e6ce) - (void) finishedTest:(id)arg1; (0x390a59) - (id) _touchesEvent; (0x23d94f) - (void) setApplicationSupportsShakeToEdit:(BOOL)arg1; (0x23bf31) - (void) _deactivateForReason:(int)arg1 notify:(BOOL)arg2; (0x22b8f8) - (void) _fetchInfoPlistFlags; (0x23c7f0) - (void) _setTextLegibilityEnabled:(BOOL)arg1; (0x249882) - (id) _mainStoryboardName; (0x22bf4d) - (BOOL) _doRestorationIfNecessary; (0x249d5d) - (void) applicationWillSuspend; (0x23752b) - (void) _setHandlingURL:(BOOL)arg1 url:(id)arg2; (0x23a36a) - (BOOL) _handleDelegateCallbacksWithOptions:(id)arg1 isSuspended:(BOOL)arg2 restoreState:(BOOL)arg3; (0x22c01a) - (BOOL) _hasStoryboard; (0x22bfd8) - (void) _applicationOpenURL:(id)arg1 payload:(id)arg2; (0x23a1b8) ..... in UIResponder: Class Methods: + (void) _startDeferredTrackingObjectsWithIdentifiers; (0x8e8348) + (void) _cleanupAllStateRestorationTables; (0x8e85dc) + (void) _updateStateRestorationIdentifierMap; (0x8e836c) + (id) objectWithRestorationIdentifierPath:(id)arg1; (0x8e802c) + (void) _setRestoredIdentifierPathForObject:(id)arg1 identifierPath:(id)arg2; (0x8e844d) + (void) _prepareForSecondPassStateRestoration; (0x8e85b6) + (void) _finishStateRestoration; (0x8e8644) + (void) clearTextInputContextIdentifier:(id)arg1; (0x398751) + (void) _stopDeferredTrackingObjectsWithIdentifiers; (0x8e835a) + (void) _cleanupStateRestorationObjectIdentifierTrackingTables; (0x8e856c) Properties: @property (readonly) UIView* inputView; @property (readonly) UIView* inputAccessoryView; @property (readonly) UITextInputMode* textInputMode; @property (readonly) NSString* textInputContextIdentifier; @property (readonly, nonatomic) NSArray* keyCommands; @property (readonly, nonatomic) UIResponder* _editingDelegate; @property (readonly, nonatomic) UIResponder* _responderForEditing; @property (readonly, nonatomic, getter=_proxyTextInput) UIResponder<UITextInput>* __content; @property (readonly, nonatomic) UIView<UITextInputPrivate>* _textSelectingContainer; @property (readonly, nonatomic, getter=isEditable) BOOL editable; @property (readonly, nonatomic, getter=isEditing) BOOL editing; @property (readonly, nonatomic, getter=_caretRect) CGRect caretRect; @property (copy, nonatomic) NSString* restorationIdentifier; @property (readonly, nonatomic) NSUndoManager* undoManager; Instance Methods: - (id) _responderForEditing; (0x397e74) - (BOOL) canPerformAction:(SEL)arg1 withSender:(id)arg2; (0x3983fc) - (id) targetForAction:(SEL)arg1 withSender:(id)arg2; (0x39842c) - (void) _physicalButtonsBegan:(id)arg1 withEvent:(id)arg2; (0x3996d6) - (id) _deepestUnambiguousResponder; (0x39973f) - (void) touchesCancelled:(id)arg1 withEvent:(id)arg2; (0x397b37) - (id) _keyCommandForEvent:(id)arg1; (0x398bab) - (void) _handleKeyUIEvent:(id)arg1; (0x399183) - (void) _handleKeyEvent:(__GSEvent*)arg1; (0x399142) - (void) _wheelChangedWithEvent:(id)arg1; (0x397cb7) - (void) _physicalButtonsEnded:(id)arg1 withEvent:(id)arg2; (0x3996f9) - (void) _physicalButtonsCancelled:(id)arg1 withEvent:(id)arg2; (0x39971c) - (void) motionEnded:(int)arg1 withEvent:(id)arg2; (0x397bb3) - (id) keyCommands; (0x398a39) - (id) textInputMode; (0x398615) ..... in NSObject: Class Methods: + (void) _installAppearanceSwizzlesForSetter:(id)arg1; (0x78d82c) + (BOOL) __accessibilityGuidedAccessStateEnabled; (0x539dac) + (int) __accessibilityGuidedAccessRestrictionStateForIdentifier:(id)arg1; (0x539db3) + (void) __accessibilityRequestGuidedAccessSession:(BOOL)arg1 completion:(^block)arg2; (0x539dba) + (id) _alternateUISwitchableSelectorPairs; (0x3f929b) + (BOOL) isSelectorExcludedFromWebScript:(SEL)arg1; (0x42b5c40) + (BOOL) isKeyExcludedFromWebScript:(const char*)arg1; (0x42b5c50) + (id) _webkit_invokeOnMainThread; (0x42a4d90) 

__methodDescriptionForClass - a list of methods implemented in a specific class, without regard to the base classes

 (lldb) po [NSObject __methodDescriptionForClass:[NSString class]] in NSString: Class Methods: + (void) _web_setWordRoundingEnabled:(BOOL)arg1; (0x42a4e50) + (BOOL) _web_wordRoundingEnabled; (0x42a4ea0) + (void) _web_setWordRoundingAllowed:(BOOL)arg1; (0x42a4ec0) + (BOOL) _web_wordRoundingAllowed; (0x42a4ee0) + (void) _web_setAscentRoundingEnabled:(BOOL)arg1; (0x42a4f00) + (BOOL) _web_ascentRoundingEnabled; (0x42a4f20) + (id) _webkit_localCacheDirectoryWithBundleIdentifier:(id)arg1; (0x42a0660) + (id) _web_stringWithData:(id)arg1 textEncodingName:(id)arg2; (0x42a0620) + (float) defaultLineHeightForFont:(id)arg1; (0x2e79478) + (float) defaultBaselineOffsetForFont:(id)arg1; (0x2e794ce) + (int) typesetterBehavior; (0x2e79389) + (float) hyphenationFactor; (0x2e79339) + (BOOL) usesFontLeading; (0x2e78f52) + (void) setUsesFontLeading:(BOOL)arg1; (0x2e78fa3) + (void) setTypesetterBehavior:(int)arg1; (0x2e793ed) + (BOOL) usesScreenFonts; (0x2e7901f) + (void) setUsesScreenFonts:(BOOL)arg1; (0x2e79089) + (void) setShowsInvisibleCharacters:(BOOL)arg1; (0x2e7911f) + (BOOL) showsInvisibleCharacters; (0x2e7919e) + (void) setShowsControlCharacters:(BOOL)arg1; (0x2e791f2) + (BOOL) showsControlCharacters; (0x2e79271) + (void) setHyphenationFactor:(float)arg1; (0x2e792c5) + (id) copyStringGUID; (0x7f54e23) + (id) copyStringGUIDForObject:(id)arg1; (0x7f54eee) + (id) stringGUID; (0x7f54e73) + (id) stringGUIDForObject:(id)arg1; (0x7f54ead) + (id) randomString; (0x7f54f14) + (id) generatedRoomNameForGroupChat; (0x7f54fa6) + (id) sbs_stringFromCGRect:(CGRect)arg1; (0x3d84171) + (id) stringWithUnichar:(unsigned long)arg1; (0x3fa6420) + (USet*) _characterSetWithPattern:(id)arg1; (0x3fa3bbc) + (id) _stringWithUnichar:(unsigned long)arg1; (0x3fa3a52) + (USet*) _ideographSet; (0x3fa40c1) + (USet*) _japaneseLetterSet; (0x3fa3fc1) + (USet*) _nonIdeographicCharacterSet; (0x3fa3cc9) + (USet*) _nonHiraganaOrKatakanaSet; (0x3fa3dc1) + (USet*) _nonHiraganaKatakanaOrBopomofoSet; (0x3fa3ec1) + (USet*) _bopomofoSet; (0x3fa41c1) + (USet*) _bopomofoToneSet; (0x3fa42c1) + (id) cutStringGUID; (0x7d5a0f3) + (unsigned int) defaultCStringEncoding; (0x11649ca) + (BOOL) supportsSecureCoding; (0x1258f74) + (id) localizedStringWithFormat:(id)arg1; (0x125684d) + (id) localizedNameOfStringEncoding:(unsigned int)arg1; (0x1166bbe) + (id) stringWithCharacters:(const unsigned short*)arg1 length:(unsigned int)arg2; (0x1188bbe) + (id) pathWithComponents:(id)arg1; (0x1165181) + (id) stringWithString:(id)arg1; (0x11a2e83) + (id) stringWithCString:(const char*)arg1; (0x1256740) + (id) stringWithCString:(const char*)arg1 length:(unsigned int)arg2; (0x12567ea) + (id) stringWithCString:(const char*)arg1 encoding:(unsigned int)arg2; (0x11a231c) + (id) stringWithBytes:(const void*)arg1 length:(unsigned int)arg2 encoding:(unsigned int)arg3; (0x11ef8a5) + (id) stringWithFormat:(id)arg1 locale:(id)arg2; (0x12568d5) + (id) stringWithContentsOfFile:(id)arg1; (0x125696b) + (id) stringWithContentsOfURL:(id)arg1; (0x12569c6) + (id) stringWithContentsOfURL:(id)arg1 encoding:(unsigned int)arg2 error:(id*)arg3; (0x116a661) + (id) stringWithContentsOfURL:(id)arg1 usedEncoding:(unsigned int*)arg2 error:(id*)arg3; (0x1256a2a) + (id) stringWithContentsOfFile:(id)arg1 usedEncoding:(unsigned int*)arg2 error:(id*)arg3; (0x1256a9c) + (const unsigned int*) availableStringEncodings; (0x1259e58) + (id) _web_stringRepresentationForBytes:(long long)arg1; (0x1273329) + (void) initialize; (0x117b78e) + (id) allocWithZone:(_NSZone*)arg1; (0x1180464) + (id) string; (0x11cb32f) + (id) stringWithUTF8String:(const char*)arg1; (0x118aad8) + (id) stringWithFormat:(id)arg1; (0x118eb75) + (id) stringWithContentsOfFile:(id)arg1 encoding:(unsigned int)arg2 error:(id*)arg3; (0x1205443) Properties: @property (readonly, nonatomic) NSString* mobileMeDomain; @property (readonly, nonatomic) BOOL hasMobileMeSuffix; @property (readonly, nonatomic) NSString* stripMobileMSuffixIfPresent; Instance Methods: - (id) _uikit_stringByTrimmingWhitespaceAndNewlines; (0x5c648c) - (id) _uikit_stringWithWritingDirection:(int)arg1 asOverride:(BOOL)arg2; (0x5c6571) - (id) queryKeysAndValues; (0x43e327) - (id) unescapedQueryValue; (0x43e301) - (CGSize) _optimizedSizeWithFont:(id)arg1; (0x4340e2) - (id) _adjustedFontFromFont:(id)arg1 withinFrame:(CGRect)arg2 minimumSize:(float)arg3 textSize:(CGSize*)arg4; (0x4341cb) - (id) stringByStandardizingWhitespace; (0x4071ce) ..... 

_shortMethodDescription (if it is rough, it calls [self __methodDescriptionForClass: [self class]])

 (lldb) po [UIApplication _shortMethodDescription] <UIApplication: 0x8d83400>: in UIApplication: Class Methods: + (BOOL) registerAsSystemApp; (0x2378c5) + (BOOL) rendersLocally; (0x2378d7) + (void) _startWindowServerIfNecessary; (0x230e26) + (void) _startStatusBarServerIfNecessary; (0x230f9a) + (int) statusBarStyleForString:(id)arg1; (0x23c19d) + (int) _backgroundStyleForString:(id)arg1; (0x23c39e) + (BOOL) _isBackgroundStyleTransparent:(int)arg1; (0x23c4e0) + (int) interfaceOrientationForString:(id)arg1; (0x23c4ef) + (BOOL) isRunningInStoreDemoMode; (0x22abcb) + (BOOL) shouldMakeUIForDefaultPNG; (0x22ac29) + (void) _noteInterfaceOrientationChangingTo:(int)arg1; (0x22be17) + (void) _installAfterCACommitHandler; (0x22d45f) + (BOOL) _isAfterCACommitHandlerInstalled; (0x22d512) + (BOOL) isRunningEventPump; (0x237848) + (id) stringForStatusBarStyle:(int)arg1; (0x23c169) + (id) stringForInterfaceOrientation:(int)arg1; (0x23c5d9) + (void) registerObjectForStateRestoration:(id)arg1 restorationIdentifier:(id)arg2; (0x8e6863) + (id) sharedApplication; (0x22a2b0) Properties: @property (nonatomic, getter=isProximitySensingEnabled) BOOL proximitySensingEnabled; @property (nonatomic) <UIApplicationDelegate>* delegate; @property (nonatomic, getter=isIdleTimerDisabled) BOOL idleTimerDisabled; @property (readonly, nonatomic) UIWindow* keyWindow; @property (readonly, nonatomic) NSArray* windows; @property (nonatomic, getter=isNetworkActivityIndicatorVisible) BOOL networkActivityIndicatorVisible; @property (nonatomic) int statusBarStyle; @property (nonatomic, getter=isStatusBarHidden) BOOL statusBarHidden; @property (nonatomic) int statusBarOrientation; @property (readonly, nonatomic) double statusBarOrientationAnimationDuration; @property (readonly, nonatomic) CGRect statusBarFrame; @property (nonatomic) int applicationIconBadgeNumber; @property (nonatomic) BOOL applicationSupportsShakeToEdit; @property (readonly, nonatomic) int applicationState; @property (readonly, nonatomic) double backgroundTimeRemaining; @property (readonly, nonatomic) int backgroundRefreshStatus; @property (readonly, nonatomic, getter=isProtectedDataAvailable) BOOL protectedDataAvailable; @property (readonly, nonatomic) int userInterfaceLayoutDirection; @property (readonly, nonatomic) NSString* preferredContentSizeCategory; @property (copy, nonatomic, setter=_setPreferredContentSizeCategoryName:) NSString* preferredContentSizeCategoryName; (@synthesize preferredContentSizeCategoryName = _preferredContentSizeCategoryName;) @property (nonatomic, getter=_lastTimestampWhenFirstTouchCameDown, setter=_setLastTimestampWhenFirstTouchCameDown:) double lastTimestampWhenFirstTouchCameDown; (@synthesize lastTimestampWhenFirstTouchCameDown = _lastTimestampWhenFirstTouchCameDown;) @property (nonatomic, getter=_lastTimestampWhenAllTouchesLifted, setter=_setLastTimestampWhenAllTouchesLifted:) double lastTimestampWhenAllTouchesLifted; (@synthesize lastTimestampWhenAllTouchesLifted = _lastTimestampWhenAllTouchesLifted;) @property (nonatomic, getter=_lastLocationWhereFirstTouchCameDown, setter=_setLastLocationWhereFirstTouchCameDown:) CGPoint lastLocationWhereFirstTouchCameDown; (@synthesize lastLocationWhereFirstTouchCameDown = _lastLocationWhereFirstTouchCameDown;) @property (nonatomic, getter=_lastLocationWhereAllTouchesLifted, setter=_setLastLocationWhereAllTouchesLifted:) CGPoint lastLocationWhereAllTouchesLifted; (@synthesize lastLocationWhereAllTouchesLifted = _lastLocationWhereAllTouchesLifted;) Instance Methods: - (int) statusBarOrientation; (0x236147) - (int) alertInterfaceOrientation; (0x247f45) - (void) startedTest:(id)arg1; (0x38e6ce) - (void) finishedTest:(id)arg1; (0x390a59) - (id) _touchesEvent; (0x23d94f) - (void) setApplicationSupportsShakeToEdit:(BOOL)arg1; (0x23bf31) - (void) _deactivateForReason:(int)arg1 notify:(BOOL)arg2; (0x22b8f8) - (void) _fetchInfoPlistFlags; (0x23c7f0) - (void) _setTextLegibilityEnabled:(BOOL)arg1; (0x249882) - (id) _mainStoryboardName; (0x22bf4d) - (BOOL) _doRestorationIfNecessary; (0x249d5d) .... (UIResponder ...) 

_ivarDescription - all object aivars, divided into classes from which they are inherited

 (lldb) po [[UIApplication sharedApplication] _ivarDescription] <UIApplication: 0x8d83400>: in UIApplication: _delegate (<UIApplicationDelegate>*): <PTCAppDelegate: 0x8c855e0> _exclusiveTouchWindows (NSMutableSet*): <__NSSetM: 0x8d838e0> _event (UIEvent*): <UIInternalEvent: 0x8d83b90> _touchesEvent (UIEvent*): <UITouchesEvent: 0x8d83dd0> _motionEvent (UIEvent*): <UIMotionEvent: 0x8d83330> _remoteControlEvent (UIEvent*): <UIRemoteControlEvent: 0x8d849a0> _remoteControlEventObservers (int): 0 _topLevelNibObjects (NSArray*): nil _networkResourcesCurrentlyLoadingCount (int): 0 _hideNetworkActivityIndicatorTimer (NSTimer*): nil _editAlertView (UIAlertView*): nil _statusBar (UIStatusBar*): <UIStatusBar: 0x997a200> _statusBarRequestedStyle (int): 0 _statusBarWindow (UIStatusBarWindow*): <UIStatusBarWindow: 0x8d85ea0> _observerBlocks (NSMutableArray*): <__NSArrayM: 0x8d85060> _postCommitActions (NSMutableArray*): <__NSArrayM: 0x8d85080> _mainStoryboardName (NSString*): @"Main_iPhone" _tintViewDurationStack (NSMutableArray*): nil _statusBarTintColorLockingControllers (NSMutableArray*): nil _statusBarTintColorLockingCount (int): 0 _preferredContentSizeCategory (NSString*): nil _applicationFlags (unknown type) _defaultTopNavBarTintColor (UIColor*): nil _undoButtonIndex (int): 0 _redoButtonIndex (int): 0 _moveEvent (UIMoveEvent*): <UIMoveEvent: 0x8d84f20> _physicalButtonsEvent (UIPhysicalButtonsEvent*): <UIPhysicalButtonsEvent: 0x8d84e10> _wheelEvent (UIWheelEvent*): <UIWheelEvent: 0x8d85020> _physicalButtonMap (NSMutableDictionary*): <__NSDictionaryM: 0x8d832f0> _physicalKeyboardEvent (UIPhysicalKeyboardEvent*): <UIPhysicalKeyboardEvent: 0x8d84d70> _backgroundHitTestWindow (UIWindow*): nil _eventQueue (NSMutableArray*): <__NSArrayM: 0x8d850a0> _childEventMap (__CFDictionary*): <c050d808> _disableTouchCoalescingCount (int): 0 _currentTimestampWhenFirstTouchCameDown (double): 127388.411122337 _currentLocationWhereFirstTouchCameDown (CGPoint): {274, 549.5} _preferredContentSizeCategoryName (NSString*): nil _lastTimestampWhenFirstTouchCameDown (double): 127386.946548556 _lastTimestampWhenAllTouchesLifted (double): 127388.416909239 _lastLocationWhereFirstTouchCameDown (CGPoint): {93.5, 116.5} _lastLocationWhereAllTouchesLifted (CGPoint): {274, 549.5} in UIResponder: in NSObject: isa (Class): UIApplication 

__ivarDescriptionForClass - a list of ayvars in a particular class, excluding base classes

 (lldb) po [[UIApplication sharedApplication] __ivarDescriptionForClass:[NSObject class]] in NSObject: isa (Class): UIApplication 

Source: https://habr.com/ru/post/227987/


All Articles