###我写了下面的代码
- (int)my_test:(int)sender {
NSMutableDictionary *dic1 = [NSMutableDictionary new];
NSMutableDictionary *dic2 = [NSMutableDictionary new];
[dic2 setObject:@"wode" forKey:@"name"];
[dic1 setObject:@"test" forKey:@"value"];
int temp = 2;
[dic1 setObject:@(temp+sender) forKey:@"value1"];
return 2;
}
###通过hopper之后
000000010000ef04 stp x29, x30, [sp, #0xfffffff0]! ; Objective C Implementation defined at 0x100034138 (instance)
000000010000ef08 mov x29, sp
000000010000ef0c sub sp, sp, #0x50
000000010000ef10 adrp x8, #0x100037000
000000010000ef14 add x8, x8, #0x978 ; @selector(new)
000000010000ef18 adrp x9, #0x100038000 ; @selector(secondAttribute)
000000010000ef1c add x9, x9, #0x778 ; objc_cls_ref_NSMutableDictionary
000000010000ef20 stur x0, [x29, #0xfffffff8]
000000010000ef24 stur x1, [x29, #0xfffffff0]
000000010000ef28 stur w2, [x29, #0xffffffec]
000000010000ef2c ldr x9, [x9]
000000010000ef30 ldr x1, [x8]
000000010000ef34 mov x0, x9
000000010000ef38 bl imp___stubs__objc_msgSend
000000010000ef3c adrp x8, #0x100037000
000000010000ef40 add x8, x8, #0x978 ; @selector(new)
000000010000ef44 adrp x9, #0x100038000 ; @selector(secondAttribute)
000000010000ef48 add x9, x9, #0x778 ; objc_cls_ref_NSMutableDictionary
000000010000ef4c stur x0, [x29, #0xffffffe0]
000000010000ef50 ldr x9, [x9]
000000010000ef54 ldr x1, [x8]
000000010000ef58 mov x0, x9
000000010000ef5c bl imp___stubs__objc_msgSend
000000010000ef60 adrp x8, #0x100030000
000000010000ef64 add x8, x8, #0xcd0 ; @"wode"
000000010000ef68 adrp x9, #0x100030000
000000010000ef6c add x9, x9, #0xcf0 ; @"name"
000000010000ef70 adrp x1, #0x100037000
000000010000ef74 add x1, x1, #0xe20 ; @selector(setObject:forKey:)
000000010000ef78 str x0, [sp, #0x28]
000000010000ef7c ldr x0, [sp, #0x28]
000000010000ef80 ldr x1, [x1]
000000010000ef84 mov x2, x8
000000010000ef88 mov x3, x9
000000010000ef8c bl imp___stubs__objc_msgSend
000000010000ef90 adrp x8, #0x100030000
000000010000ef94 add x8, x8, #0xd10 ; @"test"
000000010000ef98 adrp x9, #0x100030000
000000010000ef9c add x9, x9, #0xd30 ; @"value"
000000010000efa0 adrp x0, #0x100037000
000000010000efa4 add x0, x0, #0xe20 ; @selector(setObject:forKey:)
000000010000efa8 ldur x1, [x29, #0xffffffe0]
000000010000efac ldr x0, [x0]
000000010000efb0 str x0, [sp, #0x18]
000000010000efb4 mov x0, x1
000000010000efb8 ldr x1, [sp, #0x18]
000000010000efbc mov x2, x8
000000010000efc0 mov x3, x9
000000010000efc4 bl imp___stubs__objc_msgSend
000000010000efc8 adrp x8, #0x100037000
000000010000efcc add x8, x8, #0xbf0 ; @selector(numberWithInt:)
000000010000efd0 adrp x9, #0x100038000 ; @selector(secondAttribute)
000000010000efd4 add x9, x9, #0x810 ; objc_cls_ref_NSNumber
000000010000efd8 orr w10, wzr, #0x2
000000010000efdc str w10, [sp, #0x24]
000000010000efe0 ldur x0, [x29, #0xffffffe0]
000000010000efe4 ldr x9, [x9]
000000010000efe8 ldr w10, [sp, #0x24]
000000010000efec ldur w11, [x29, #0xffffffec]
000000010000eff0 add w2, w10, w11
000000010000eff4 ldr x1, [x8]
000000010000eff8 str x0, [sp, #0x10]
000000010000effc mov x0, x9
000000010000f000 bl imp___stubs__objc_msgSend ; XREF=-[QSLayoutConstraint remove]+56, -[QSLayoutConstraint change]+56, -[QSLayoutConstraint equal]+56, -[QSLayoutConstraint lessThanOrEqual]+56, -[QSLayoutConstraint greaterThanOrEqual]+56, -[QSLayoutConstraint multiplied]+56
000000010000f004 mov x29, x29
000000010000f008 bl imp___stubs__objc_retainAutoreleasedReturnValue
000000010000f00c adrp x8, #0x100030000
000000010000f010 add x8, x8, #0xd50 ; @"value1"
000000010000f014 adrp x9, #0x100037000
000000010000f018 add x9, x9, #0xe20 ; @selector(setObject:forKey:)
000000010000f01c mov x1, x0
000000010000f020 ldr x9, [x9]
000000010000f024 ldr x3, [sp, #0x10]
000000010000f028 str x0, [sp, #0x8]
000000010000f02c mov x0, x3
000000010000f030 str x1, [sp]
000000010000f034 mov x1, x9
000000010000f038 ldr x2, [sp]
000000010000f03c mov x3, x8
000000010000f040 bl imp___stubs__objc_msgSend
000000010000f044 ldr x0, [sp, #0x8]
000000010000f048 bl imp___stubs__objc_release
000000010000f04c movz x8, #0x0
000000010000f050 add x9, sp, #0x28
000000010000f054 mov x0, x9
000000010000f058 mov x1, x8
000000010000f05c bl imp___stubs__objc_storeStrong
000000010000f060 movz x8, #0x0
000000010000f064 sub x9, x29, #0x20
000000010000f068 mov x0, x9
000000010000f06c mov x1, x8
000000010000f070 bl imp___stubs__objc_storeStrong
000000010000f074 orr w0, wzr, #0x2
000000010000f078 mov sp, x29
000000010000f07c ldp x29, x30, [sp], #0x10
000000010000f080 ret
; endp
###这里我有几个不解的
- 1.000000010000f000 这内存地址的代码他是怎么解析的为什么他写的根本不对啊虽然我项目里有这些类但是这个方法根本没有使用是不是我设置的不对
- 2.如何知道name这个key是设置给第一个生成的NSMutableDictionary对象还是第二个
- 3.如果确定value1这个key的值因为这之中有新声明了个变量而且加上原有变量的
- 4.变量声明之后不是会给他一个内存空间吗 这怎么确定的 我怎么知道对象在哪里
- 5.在执行一个方法之后如果有返回值他存储在哪里