我有这样的事情:
@protocol MyProtocol <NSObject>
- (void)oneMethod;
@end
Run Code Online (Sandbox Code Playgroud)
.
@interface BaseClassWithProtocol : NSObject <MyProtocol>
@end
Run Code Online (Sandbox Code Playgroud)
.
@interface ChildClassWithProtocol : BaseClassWithProtocol
@end
Run Code Online (Sandbox Code Playgroud)
BaseClassWithProtocol
已经实现了oneMethod
,如果ChildClassWithProtocol
在oneMethod
实现中没有调用super,我想显示警告.
但我不知道我应该在哪里写__attribute__((objc_requires_super))
.
在.h中重新定义oneMethod看起来很愚蠢时,不支持在协议中编写它.
那么有什么标准方法可以解决这个问题吗?
我有这样的事情:
projectName= echo $tempPBXProjFilePath | sed "s/.*\/\(.*\)\.xcodeproj.*$/\1/g";
Run Code Online (Sandbox Code Playgroud)
我想从中提取子串$tempPBXProjFilePath
.这是正确的.但是,如果我这样写:
projectName=echo $tempPBXProjFilePath | sed "s/.*\/\(.*\)\.xcodeproj.*$/\1/g";
Run Code Online (Sandbox Code Playgroud)
这是错误的.区别在于变量之后的空格.
我知道变量后面没有空格.但是等号后的空白是什么意思.空白有什么特别的意义吗?
我想在第三方类实例方法上设置断点。
br set -r "\[ThirdPartyClass .*\]$"
Run Code Online (Sandbox Code Playgroud)
但我得到了(没有位置)。
然后我想查找这个类并发现它有什么问题。
image lookup -t ThirdPartyClass
Run Code Online (Sandbox Code Playgroud)
输出为空。事情变得很奇怪。
最后,我使用 hopper 来查找实例方法的地址偏移量,如下所示。
-[ThirdPartyClass aMethod:]:
00000001008f83b8 stp x22, x21, [sp, #-0x30]! ; Objective C Implementation defined at 0x101098168 (instance method), DATA XREF=0x101098168
00000001008f83bc stp x20, x19, [sp, #0x10]
00000001008f83c0 stp x29, x30, [sp, #0x20]
00000001008f83c4 add x29, sp, #0x20
00000001008f83c8 mov x19, x2
00000001008f83cc mov x20, x0
00000001008f83d0 adrp x8, #0x101102000
00000001008f83d4 ldr x1, [x8, #0xb40]
00000001008f83d8 mov x0, x19
00000001008f83dc bl imp___stubs__objc_msgSend
00000001008f83e0 adrp …
Run Code Online (Sandbox Code Playgroud)