[OC 内存管理的灵异问题]OC 重写 description 后出现了有关于内存的奇怪问题。请大家告诉我下为什么


首先要说下这个问题我已经解决了,只是不知道为什么这样做他就能解决这个问题。想了很久都不知道,所以请大家帮我思考下。

这是个我自己做的小例子

我认为问题可能出现在[WeiboMsg]强制转换问题上,可能是强制转换失败导致

我不清楚的地方在为什么强制转换错误会导致野指针错误?

下面贴上代码

这个是出现问题的类:

image

这个是main函数:

image

下面是代码的链接:

原谅我传到百度云。我传到百度云是因为百度云相对来说速度快点,私以为当转盘没问题。

http://pan.baidu.com/s/1jG4DwyU

*图片看不清楚字的话,可以对右键新标签页打开 *
或者

main :
http://7xj8pi.com1.z0.glb.clouddn.com/question_main.png

weibomsg类:

http://7xj8pi.com1.z0.glb.clouddn.com/question_weibomsg.png

内存管理 ios objective-c

ye11ow 9 years, 11 months ago

__func__ 返回的类型是 const char * ,也就是普通的C字符串,而NSString是一个类。这两个虽然都是字符串,但是在内存中保存的形态是完全不一样的,C字符串其实就是一个简单的字节数组数组最后一个元素值为零,而NSString是一个类,结构要复杂得多(具体可以一直往上追溯父类,可以发现就是其实是一个结构体)。
你做了一个强转,只是逃过了编译器的检查,但是运行的时候,在内存中它还是个C字符串。因为你强转了,这个C字符串会被当做NSString对象进行处理,当然要报错了!

Tips

记住,所有的变量类型都是想让编译器能在程序运行之前检测出我们的错误,运行的时候,CPU是不认识变量类型的!所以尽量避免强转,除非你知道自己在干什么。

荡漾转转神 answered 9 years, 11 months ago

Your Answer