0
我有一個特殊的NSLog
方法swizzle,它將當前方法作爲日誌語句的一部分進行打印。解決方法:使用未聲明的標識符'_cmd'
對於目標C的方法,我有一個使用一個宏:NSStringFromSelector(_cmd)
對於非目標C的方法,我有一個使用__PRETTY_FUNCTION__
因爲_cmd
並不限定的第二宏。
我現在想用兩個相同的宏,所以我想測試,如果它被定義,我想我能做到這一點是這樣的:
NSString *command = (&_cmd != nil ? NSStringFromSelector(_cmd) : [NSString stringWithCString:__PRETTY_FUNCTION__ encoding:NSUTF8StringEncoding])
,但我仍然得到一些Use of undeclared identifier '_cmd'
錯誤當宏在非Objective-C方法中使用時。如何確定_cmd
是否已定義,如何進行運行時測試?
的問題是,我要找的只是方法的名稱,而不是類名。我可以嘗試一些解析,但不能確定__PRETTY_FUNCTION__會返回每次看起來相同的東西 – coneybeare
如果'__PRETTY_FUNCTION__'以'-'或'+'開頭,則將所有內容剝離到一個空格處並剝離尾部' ]'。 –
我最終使用NSScanner來抓取「[」,然後是「」和「]」之後的所有內容,因爲從塊調用的方法在「]」之後有一個__block_invoke_0, – coneybeare