代码:
IJKDemoLogTrace *demo = [[IJKDemoLogTrace init] alloc];
AppCode提示: class method is called from instance context.
编译ok, 运行报错:
2018-12-11 10:58:01.497336+0800 ARMPlayerDemo[24872:14368023] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** +[IJKDemoLogTrace<0x10241c110> init]: cannot init a class object.' *** First throw call stack: ( 0 CoreFoundation 0x00000001074271bb __exceptionPreprocess + 331 1 libobjc.A.dylib 0x00000001069c5735 objc_exception_throw + 48 2 CoreFoundation 0x00000001074465cf +[NSObject(NSObject) init] + 127 3 ARMPlayerDemo 0x0000000102401efb -[IJKDemoMainViewController viewDidLoad] + 427 4 UIKitCore 0x000000010f5304e1 -[UIViewController loadViewIfRequired] + 1186 5 UIKitCore 0x000000010f490104 -[UINavigationController _updateScrollViewFromViewController:toViewController:] + 68 6 UIKitCore 0x000000010f4903f8 -[UINavigationController _startTransition:fromViewController:toViewController:] + 147 7 UIKitCore 0x000000010f49148b -[UINavigationController _startDeferredTransitionIfNeeded:] + 896 8 UIKitCore 0x000000010f4927e0 -[UINavigationController __viewWillLayoutSubviews] + 150 9 UIKitCore 0x000000010f472600 -[UILayoutContainerView layoutSubviews] + 217 10 UIKit 0x000000011ff796c4 -[UILayoutContainerViewAccessibility layoutSubviews] + 42 11 UIKitCore 0x0000000110039795 -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 1441 12 QuartzCore 0x0000000105e66b19 -[CALayer layoutSublayers] + 175 13 QuartzCore 0x0000000105e6b9d3 _ZN2CA5Layer16layout_if_neededEPNS_11TransactionE + 395 14 QuartzCore 0x0000000105de47ca _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 342 15 QuartzCore 0x0000000105e1b97e _ZN2CA11Transaction6commitEv + 576 16 UIKitCore 0x000000010fb6a2d0 __34-[UIApplication _firstCommitBlock]_block_invoke_2 + 139 17 CoreFoundation 0x000000010738c62c __CFRUNLOOP_IS_CALLING_OUT_TO_A_BLOCK__ + 12 18 CoreFoundation 0x000000010738bde0 __CFRunLoopDoBlocks + 336 19 CoreFoundation 0x0000000107386654 __CFRunLoopRun + 1284 20 CoreFoundation 0x0000000107385e11 CFRunLoopRunSpecific + 625 21 GraphicsServices 0x000000010a82c1dd GSEventRunModal + 62 22 UIKitCore 0x000000010fb4f81d UIApplicationMain + 140 23 ARMPlayerDemo 0x000000010240d850 main + 112 24 libdyld.dylib 0x00000001079c3575 start + 1
最后发现是alloc和init顺序反了, 正确调用方式是
IJKDemoLogTrace *demoLog = [[IJKDemoLogTrace alloc] init];
AppCode给的提示`class method is called from instance context.`很形象.
init是一个类的方法, 不应该在instance context里调用.