A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© whymerain 中级黑马   /  2015-3-18 12:16  /  888 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

_Book = [Book retain]中,[Book retain]为Book计数器加一,返回Book对象。这样直接让  _Book指向BOOk看不大懂,以前指向都是这样写的 Person *p = [Person new]。

9 个回复

倒序浏览
首先,你的变量名写的不规范,变量名第一个字母是小写,类名第一个字母大写。
回复 使用道具 举报
慢 慢 看就懂了。。。。
回复 使用道具 举报
其次,关于这个_book = [book retain];原来不关心内存的时候,写的setter方法就是
- (void)setBook:(Book *)book
{
      _book = book;
}
这个你应该还记得吧,那加上retain返回book是一样的啊。
所谓的_book指向book是不好理解的。这个你可以理解为赋值操作就行了。就是把对象book的内容都赋值给_book。
如果硬要理解_book指向book,那你理解为,对象名其实都是指针。当初新建book对象的时候,book就指向一个放着该对象的内存,计数器为1,那_book = book;就是让_book也指向这个放着该对象的内存.这样该对象就有两个指针指向它,所以计数器要加1为2.

这些其实你可以不用纠结,以后setter方法都是@property代替。oc有ARC机制,基本不需要考虑内存管理。
回复 使用道具 举报 1 0
a380vs747` 发表于 2015-3-18 13:18
其次,关于这个_book = ;原来不关心内存的时候,写的setter方法就是
- (void)setBook:(Book *)book
{

虽然看不大懂,但是很有道理的样子
回复 使用道具 举报
楼主,你之所以看不懂说明你还是没有深层的理解,事实上对象就是用一个指针变量来保存的,而任何对象由于其都继承自基类所以都天然的具备retain方法,而我敢大胆的猜想到他再设计这个retain方法的时候就设计好了他的返回值为当前对象所属类型的指针。
retain就是给retain count加1,然后返回当前对象,谁调用返回谁,你所的那个person是新创建出来的对象,而[book retain]时book对象已经存在了,只不过book对象在执行完retain方法后顺便将自己返回了而已,希望能帮到你。
回复 使用道具 举报
whymerain 发表于 2015-3-18 13:38
虽然看不大懂,但是很有道理的样子

[book retain] 的返回值是Book 的话就通了
回复 使用道具 举报
TRY! 中级黑马 2015-3-18 13:42:17
8#
a380vs747` 发表于 2015-3-18 13:18
其次,关于这个_book = ;原来不关心内存的时候,写的setter方法就是
- (void)setBook:(Book *)book
{

   敢问楼主您看到哪里了?怎么懂怎么多?
回复 使用道具 举报
TRY! 发表于 2015-3-18 13:42
敢问楼主您看到哪里了?怎么懂怎么多?

我不是楼主,我是帮楼主解答问题的。我是零基础,其实懂得很少,自己看了俩月c语言和oc的基础,各看了一本书,然后看了教学视频。我觉得其实不看书也行,直接看视频也可以,慢慢看。
我的入学申请的进度慢了,我是都看完了才来入学申请的,其实可以先申请,边等进度边看。
我现在很担心自己赶不上第七期,或者考不过...
回复 使用道具 举报
TRY! 中级黑马 2015-3-18 13:54:58
10#
a380vs747` 发表于 2015-3-18 13:47
我不是楼主,我是帮楼主解答问题的。我是零基础,其实懂得很少,自己看了俩月c语言和oc的基础,各看了一 ...

   我刚看,你已经很牛了,佩服!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马