关于initWithFormat方法,为什么这两个方法返回的不一样啊,谢谢大神指点

snelost 2017-11-19 01:12:40
...全文
292 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
不担心 2017-11-21
  • 打赏
  • 举报
回复
@"def"是个字符串对象,同样通过initwithformat初始化出的@"abc%@"也是个字符串对象,而str1就是指向这个字符串的指针 到了str2,根据编译器的优化,系统能识别出这里的@"abc%@"出来的字符串和str1是同一个对象,所以只是将这个对象的计数器+1,并把str2和str1设置为指向同一个地址的指针 而str11在通过initwithformat初始化时,需要在占位符那里填充一个字符串对象,而函数里提供的1234567890并不是对象,是基础类型,是个值,所以只能通过装箱把124567890转换为字符串对象,这里就会产生一个新的对象,也就是说他有自己的内存地址,同样道理str12也会产生一个新的对象,有自己的地址,所以str11和str21指向的地址并不相同,所以str11 != str21 没有仔细去研究,不过基本上应该差不太远,其实很多问题只要明白基础数据类型和对象的区别就很容易明白

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧