我的测试中,加入两个kvo属性runMode和readPointerAddress,当字符串较短的时候是NSTaggedPointerString类型,较长的时候是__NSCFString类型。
(lldb) po [NSStringFromSelector(@selector(runMode)) class]
NSTaggedPointerString
(lldb) po [NSStringFromSelector(@selector(readPointerAddress)) class]
__NSCFString
若在keyPath中使用__weak,__NSCFString类型的属性,在后续的getKVOInfosForKeypath操作中,对应取出来的KVOInfo->_keyPath为nil,去掉__weak则不会变成nil。而NSTaggedPointerString类型不受影响。
我的测试中,加入两个kvo属性runMode和readPointerAddress,当字符串较短的时候是NSTaggedPointerString类型,较长的时候是__NSCFString类型。
(lldb) po [NSStringFromSelector(@selector(runMode)) class]
NSTaggedPointerString
(lldb) po [NSStringFromSelector(@selector(readPointerAddress)) class]
__NSCFString
若在keyPath中使用__weak,__NSCFString类型的属性,在后续的getKVOInfosForKeypath操作中,对应取出来的KVOInfo->_keyPath为nil,去掉__weak则不会变成nil。而NSTaggedPointerString类型不受影响。