用XCode编写程序,如果你由于各种原因需要删除一个xib文件,在删除文件后就可能遇到一些稀奇古怪的问题,首先说下解决方法

尝试做以下工作:

  • 粗暴地删除真机/模拟器上对应的App (这个一般就能解决问题了)(注意看后文,有更温和的解决方法)
  • 对整个工程Clean一下,至于Clean在哪,建议到Help下面搜索一下
  • XCode 3可能还有个Empty Caches… -> Empty

原因我想大家已经猜到了,编译一个新版本的应用只是把要修改的部分替换成新的,似乎并不会对删除多余的东西,比如你之前建立的xib(nib),这也就导致了虽然你的代码已经不在依靠那个nib运行了,但是原来的nib还是残留在那里,并且会在运行时加载,这就可能造成一些问题.

同样,如果你错误地删除了一个nib而没有"刷新"一下你的应用,这个错误就会被掩盖起来,等你的应用编译或安装到其他机器上时就可能产生各种错误.

了解了原理也就知道了替换第一步的放法:

  • 找到xxx.app,显示包内容,删除你不想要的nib文件

–以上–

Tagged with:  

Macvim Python IDE搭建

On 09/16/2011, in Python, by ultragtx

MacVim有For Lion版本了,支持全屏,而且是我发现的第一个在双显示器下可以全屏到另一个屏幕的应用,但是Toolbar和编辑区分离了.

可能需要的插件:

  • TagList,注意这个插件需要Exuberant ctags,Mac下使用 Macports安装(sudo port install ctags)
  • NERD_tree:一个类似Finder的东西,帮助你快速跳转目录打开文件而不必费劲打cd xxxxxx
  • Pydiction:在insert模式下按tab可以补全
  • VimPdb:使用默认的文件加载不会成功,你可以sorce一下看看错误(Not an editor command: ^M),解决方法,vim编辑VimPdb.vim,然后:set ff=unix,:wq重新加载下就可以了
    快捷键问题:VimPdb默认使用了F8等已经被mac占用了的几个按键,可以编辑VimPdb.vim在540行那里开始做如下修改:

     

     

    " Was F7 and F8
    map :call PdbStepInto()
    map :call PdbStepOver()
     
     " Was F4
    map :call PdbEvalCurrentWord()
    map :call PdbEvalCurrentWORD()
    " Was F3
    map :call PdbEvalExpression()
    可以参考这个地址
大概就这些了,如果你认为Vim是反人类的(其实我也这么想,之所以用VIM是因为找不到一个看着顺眼的IDE),你还可以尝试其他IDE,参考这里的对比
 
–以上–
Tagged with:  

推荐:XCode 4视频教程

On 07/19/2011, in Development, iOS Dev, Mac Dev, by ultragtx

上一个项目做的差不多了,所以这几天尝试了下XCode 4,发现4与3的区别蛮大的,快捷键也改变了不少,一些功能也不知为何被精简了,比如User Script(应该是被Code Snippet代替了,不过感觉没有Script强大). 看文档实在太麻烦,上网找了找相关资料,发现之前的Become Productive in XCode系列又专门为XCode 4做了10个视频,而且这回是免费的,果断下载过来分享,毕竟看视频要比看文档直观多了。

这里还有个快捷键的PDF

XCode 4的这几个视频虽然感觉不如3的那么经典,但是作为XCode 4的快速入门还是相当有价值的。如果上面那些由于某些原因无法下载,我这里还提供一个115的下载地址,Have Fun。

PS:这篇介绍XCode 4之前的文章都是以XCode 3为基础的,要查看XCode 3的有关文章请通过标签或搜索查询.

–以上–

Tagged with:  

NSLog对程序性能的影响

On 07/02/2011, in Development, iOS Dev, Mac Dev, by ultragtx

NSLog,既可以像printf那样方便地格式化输出,同时还能输出时间以及进程ID等信息,可谓调试利器.但是其实NSLog对程序性能也有不小的影响,在执行次数比较少的情况下可能看不出来什么,当短时间大量执行的时候就会对程序执行效率产生可观的影响.

我遇到的一种情况就是我在一个UIScrollView子类的layoutSubviews方法中输出了很多次log,而这个layoutSubviews本身又有相对繁重的工作要做,由于每次拖动这个UIScrollView都要调用很多次layoutSubviews,因此程序实际运行起来拖动体验就非常差,卡顿现象严重,多次测试发现注释掉所有的NSLog后拖动就变得正常了.

综上,当你疑惑是什么导致了你的程序运行效率很差的时候不妨注释掉那些NSLog试试,你的问题也许就迎刃而解了.

–以上–

Tagged with:  

估计看这篇文章的都是习惯用iTunes播放音乐并通过评价歌曲的星级(就叫评星吧)来帮助自己筛选喜欢的歌曲.当我们工作或娱乐的同时用iTunes播放音乐的时候不免要对歌曲进行评分/星,一般的方法实在是很麻烦,这里教大家一个添加全局快捷键的方法,帮助你在所有程序下都能方便地为你的歌曲评星.步骤如下:

  1. 打开"Automator"
  2. 模版中选择"服务"
  3. 资料库中选择"实用工具",然后在右边的列表中双击"运行AppleScript"添加到工作流程中(也可以通过搜索直接找到这一项)
  4. 用如下代码覆盖原来的代码:
      tell application "iTunes"
      set the rating of current track to 20
      end tell
  5. 上面的"服务接收选定的"后面的下拉列表选择"没有输入"
  6. 保存并命名为"Rate as 1" (名字随你喜好)
  7. 4中的代码"20"改成"40", 另存为"Rate as 2",以免把第一覆盖了
  8. 依次类推把"20"分别改成"60""80""100",另存
  9. 打开"系统偏好设置" >> "键盘" >> "键盘快捷键"
  10. 左边列表里面选择"服务",然后在右边列表里就能找到你刚刚存储的那几个服务
  11. 分别给这几个服务设置快捷键,注意不要和其他快捷键冲突,我设置成了⌘⌥⇧+1/2/3/4/5
  12. 大功告成,测试一下吧,有问题留言
  13. 一点说明:20 40 ….分别表示1星 2星 … 如果想设置半星那么就用10,30…这些值

Extras:

Continue reading »

Tagged with:  

Mac免费App推荐:myPeers

On 05/28/2011, in SoftWare, by ultragtx

myPeers是一款帮助你跟踪并得到那些牛人的过去和最新的研究成果/论文/书籍等资料的应用.对于学生来说还是挺实用的,毕竟这个软件获取的内容都比较新,可以帮助你获得最新的研究成果.下载地址

就拿计算机方面来说,查找一下算法导论的作者Charles E. Leiserson,先点击主界面的Follow,然后分别填写First/Last Name等信息,就可以查看Leiserson的研究成果了,连MIT算法导论的公开课也可以查找到.

对于中国人似乎也支持,随便用一个比较NB的老师试了一下:战德臣,只查找到了一条内容,就是《计算机实用基础》这本书,估计可能其他论文是用英文什么的发表的,就没搜索到,不过可以看出myPeers还是蛮强大的.

有兴趣的同学可以尝试一下,不过该软件只有Mac版,Window/Linux就只能找其他替代方案了XD.

–以上–

Tagged with:  

[转载]51条Mac技巧

On 05/20/2011, in 折腾, 转载, by ultragtx

51条技巧,括号里面是我的评论,来源无法考证了,大家看看吧,个人感觉比较有实用价值的用红色标注了

11/05/24 更新:

      0. 快速关闭程序(超实用)
         Tab + ⌘ 是切换程序,每按一次Tab光标就会移动到另一个程序上,此时按Q(不要松开⌘)即可快速关闭相应程序

  1. 精确调节音量
    当你调节音量的同时按住Option-Shift键,将使你的音量调节单位变为原来的1/4。
  2. 通过歌词搜索音乐
    在Leopard下,Spotlight已经可以通过歌词来搜索音乐文件了.
  3. 向Mail中添加附件 (这个一般都知道吧,Mac很多地方都这样的)
    简单地通过拖拽,将文件拖到Mail图标上,Mail会自动将文件作为附件发送。
  4. 在没有鼠标或触摸板的情况下工作 (程序员必备)
    按Control-F1调出全键盘模式,然后按Control – F2进入菜单,或按Control – F3进入Dock。
  5. 慢放或快放 (挺好的一个功能)
    在Quicktime里,你可以通过触摸板的手指滑动或利用鼠标滚轮使画面一帧一帧地前进或后退,甚至停止。
  6. 在Mail中提升或降低引用级别 (本人不才,没弄明白这个干什么的)
    当我们回复邮件时,原始邮件内容被引用在邮件下方,我们可以通过按Command- '或Command-Option- '组合键“提升或降低”任意引用内容的级别。   
  7. 利用地址栏(Pathbar)移动文件 
    在Finder中,你可以通过简单拖拽文件到地址栏显示的层级文件夹中,完成文件的移动。
  8. 利用Preview(预览)剪裁图 (Preview其实超级强大,还可以抠图)
    在Preview中,选中你想要剪裁的区域,然后按Command-K,工作完成。
  9. 让你的Mac说“Hello”. (唬人专用,吵架必备,但是不支持中文,这点不如win7)
    打开Terminal(终端),在命令行输入:say Hello,回车。你的Mac就会向你问候了。当然你也可以将hello换成其它的单词。试试看。
  10. 横向移动 (常识吧)
    在cocoa程序中,例如Pages,当页面太大出现了横向滚动条时,你可以按下Shift键,再利用鼠标滚轮就可以横向移动页面了。当然,有些程序例如Photoshop,Shift键不管用,你需要按下Command键。
  11. 让Mail替你读邮件 (读得超烂)
    如果你实在太懒了不想自己看邮件,你可以选中邮件文字,然后选择“编辑” – “阅读”- “开始阅读”,然后你的Mac会为你朗读这些文字。遗憾的是,它不懂汉语。
  12. Safari中建立新标签  (5.0.5可以在工具栏加个新建标签按钮, 这样就算只有一个标签时也可以方便新建标签)
    在Safari的标签栏的空白处双击鼠标,会建立一个新标签(类似于Firefox)。
  13. 放大/缩小屏幕显示
    按住Control键,滚动鼠标转轮就可以放大、缩小你的屏幕显示了。
  14. 隐藏所有其它窗口
    窗口太多太乱,按下Command-Option-H组合键,除了当前窗口以外的其它窗口会自动隐藏(不是缩小)。
  15. 使隐藏的程序在Dock上透明"  (一般这种改plist我都不太喜欢)
    在Terminal(终端)中输入以下内容:
    defaults write com.apple.Dock showhidden -bool YES
     执行后,所有隐藏的程序图标在Dock上变成透明的了。
  16. 将常用项目拖到Finder的工具栏 (相信大家从误操作中就已经发觉这个功能了)
    是的,你可以轻松将一些常用文件夹拖放到Finder工具栏。如果不想要了,按住Command键后再拖离工具栏就行了。
  17. 从iTunes音乐库中删除歌曲 (用这个方法可以从播放列表直接删除歌曲,而不止是从播放列表删除,以前我还彪呼呼的到音乐里搜索到相应歌曲删除)
    当你想要删除iTunes中的歌曲,只需要高亮歌曲名称,然后按Option-Delete,就可以从iTunes库中将歌曲完全删除。
  18. 强迫Safari在新Tab中打开链接 (新版Safari已经默认标签打开了吧)
    在Terminal(终端)中输入
    defaults write com.apple.Safari TargetedClicksCreateTabs -bool true,
    执行后,Safari将始终在新Tab中打开链接。(有时候,我们在Firefox中就是这么设置的)
  19. 快速清空垃圾桶 (其实也不差那么一下,finder偏好设置里可以设置是否在删除前提示)
    如果你在清空垃圾桶是不想看到任何烦人的提示,你可以按下:Command-Option-Shift-Delete组合键,世界清净了。(当然,这样做之前你必须确定垃圾桶里的是真正的废品)
  20. 利用Preview快速提取图标(估计就是我前面提到的抠图功能)
    漂亮精致的图标文件其实可以用在很多场合,如文书、演示等等。不需要任何第三方软件,仅仅利用Preview,你就可以轻松做到。
  21. 移除抗锯齿(还是感觉打开了抗锯齿顺眼一些)
    当我们利用Ctrl和鼠标滚轮放大屏幕的时候,系统自动的“抗锯齿”功能自动启用,让你感觉每个字都很模糊的样子,这时候,你可以按下:Command-Option-Backslash(反斜杠”\”)关闭“抗锯齿”功能
  22. Eliza的精神病办公室(其实这个算是Emacs的)
    打开Terminal(终端)
    输入:emacs
    按Shift-Escape
    输入:xdoctor
    回答Eliza的所有问题,记得要礼貌些+ Q: z8 u; b' ^) E/ ^; [5 V
    这是免费的:)
  23. 快速订阅RSS到Mail. 
    当你在Safari的地址栏最右侧看到RSS图标时,点击它就可以快速在Mail中订阅这个地址。
  24. 调出快捷键清单 (中文的还是搜索"快捷键"吧)
    在大多数程序中,如果你想要一份详细的程序快捷键清单,那么你可以点击Leopard的help菜单,在搜索框输入:shortcuts,然后这个程序的所有快捷键就会展示给你,很酷吧。
  25. 让Mac定时启动/关闭 (黑苹果就不尝试了)
    进入Preference(设置)- Energy Saver(节能),按Schedule(计划)。
  26. 快速黑屏 (对于使用双屏还是挺管用的,要不老得按两下按钮)
    按下组合键Control-Shift-Eject(弹出光驱键),你的Mac屏幕就迅速黑屏了,移动鼠标或敲击任意键会自动恢复。这个功能可以在你暂时离开时节约能源,保护隐私,延长显示屏寿命。
  27. 在Finder中打开Spotlight搜索结果
    当你通过Spotlight搜索到文件后,按回车键就是打开这个文件,如果你按住Command然后再回车,系统会自动在Finder中打开该文件所在目录,并且高亮显示该文件。这是一个很有用的技巧。
  28. 在Mail中引用部分文字 (不知道以后能不能支持@xxx直接回复)
    收到一封邮件,你可以选定其中的一部分内容,然后点reply(回复),你选的那部分内容会自动在回函中被引用。
  29. 把屏幕保护当成桌面
    这是一个超酷的功能,首先设置一个你喜欢的屏幕保护,然后进入Terminal(终端),输入:/System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background6 
    看看桌面,是不是变成屏幕保护了?
    不想玩儿了,就按Control – C退出。;
  30. 通过Dock隐藏其它程序窗口
    按住Command-Option的同时,点击Dock上的程序,当程序打开时会自动隐藏其它已打开的窗口,世界再一次清净了。
  31. 自动调整Finder侧边栏宽度 (没试出来)
    按下组合键Command-Option-Control-T。
  32. 区分单页和多页的PDF
    多页的PDF图标在左边有一个黑色夹边,而单页的没有。
  33. 快速清空Help搜索框 (?????)
    在搜索框中输入字符,直接按回车后会打开相关内容,但是如果你按着Option键再回车,则会快速清空搜索框,你可以重新输入。
  34. 在Spotlight结果里的不同分组中跳动
    如果你按住Command键的同时按上下方向键,你可以在Spotlight搜索结果里的不同分组中跳动。这句话很拗口,试一试容易懂。 
  35. 在Spotlight中按修改日期搜索 (没看懂什么意思)
    如果你想搜索所有在2008年10月23日以前修改的文件,你可以在Spotlight中输入
    <=10/23/08( l3 `) b, B, A
    以此类推,如果是以后的文件,把 “<” 换成 “>” 就行了。
  36. 在Finder中按名称搜索 
    在Finder中按下组合键Command-Shift-F可以帮助你快速跳到按名称搜索框。
  37. 慢动作 (闲的没事玩玩还挺有意思)
    按住Shift键的同时执行一些命令,可以放慢动作给你看。目前已知可行的一些命令是:) 
    Spaces、Exposé、Dashboard、最小化、关闭Widgets、打开最小化的窗口。
  38. 组合Exposé 和 Space'
    当你按F8键激活Space后,你仍然可以Exposé所选择的Space,试试看,很有趣。  
  39. 在Space中移动所有相关程序窗口
    假如你开了3个Safari窗口,按F8激活Space,然后按住Shift键,拖动Safari窗口到另一个Space,这时所有的3个Safari窗口都移过去了。
  40. 将不同Space中的窗口收集到一起 (按C没好使)
    如果在你每个Space中都有窗口,现在你想把所有窗口全部移动到一个Space中,怎么办?按F8激活Space,然后再按C键。
  41. 改变删除方向 (只针对Mac键盘)
    在PC中,都有一个Delete按键可以删除光标后面的字符,但在Mac电脑中Delete按键只能删除光标前面的字符。有时候很不方便。其实当你按下Fn键后再敲Delete键,就可以向后删除了。
  42. 多重选择
    在大多数程序中,特别是Cocoa程序,你可以按住Command键多重选择项目,包括:文件、文字等等。
  43. 获得当前日期和时间 (写这么乱-_-)
    在Terminal中输入:0 @) r4 d9 l+ _3 v7 N6 q2 g4 ]! [/ h9 K: D: @5 d# r* p3 g
     date3 S# X- z0 r5 o% l
    0 [0 ~. t$ x- d- Y得到当前Mac日期和时间;+ J0 B$ O$ r4 W, ]. B! W2 H- ^ }
    date -jnu O6 `- M, [" b8 a+ j
    2 V- d. \3 w9 b1 S4 e得到当前的世界标准时间(格林威治时间UTC)
    7 C( i- i7 o4 v, I* G6 v4 c( A, L: |! E1 E7 k
  44. 快速跳入Applications Folder(程序目录)' x" u3 I3 P* W/ R( Q- N5 N1 K (写这么乱-__-)
    在Finder下,按下组合键Command-Shift-A,可以快速进入程序目录。
  45. 自动计算 (没弄明白)
    如果你高亮选择一个公式,比如:5*15+20.5,然后按下组合键Command-Shift-8,你的Mac会自动将高亮部分替换成正确的计算结果 95.5。注意:这需要你的电脑已开启Script Editor功能。
  46. 鼠标取词翻译 (配合中文词典就成了金山词霸)
    系统自带的字典也支持鼠标取词翻译。当你把光标悬停在一个单词上,按下Command-Control-D,这个单词的解释就会弹出来,这时候,按住Command-Control不放,移动光标就可以对其它单词进行取词翻译了。
  47. 用Grab进行截屏 (Grab中文名叫"抓图")
    Grab是Mac自带的程序,和通常的屏幕截屏不一样,用Grab截屏的好处是可以截取带有光标的屏幕,光标的样式可以在设置里选择。当然,利用Grab时间延迟功能,也能截取带菜单的截图。
  48. 获得你的Mac序列号
     – “关于本机” ,然后双击版本号位置。,
  49. 如果你忘记登陆密码 (黑苹果路过)
    ~放入系统安装光盘,重启Mac的同时按住C键。然后选择“安装”- “重设密码”。
  50. 最后一招,快速关机 (有空试试)
    你可能每天都能用得着:Command-Control-Option-Eject(弹出光驱键).
  51. 给Stack加入聚光灯效果 (10.6)
    在Leopard中,我们曾经介绍过一个小技巧,可以通过终端命令行的设置给Stack加上聚光灯的效果。当我们升级到Snow Leopard后,会发现这个设置不起作用了。这是由于在Snow Leopard中,设置的方式发生了变化。在Snow Leopard中,这个设置的命令变为了:
    defaults write com.apple.dock mouse-over-hilite-stack -boolean yes
    killall Dock
Tagged with:  

Mac下有一些软件可以播放各种无损格式,比如VLC、XLD什么的,转换的话,有一些转换器能转,本人主要推荐XLD(下载地址),集成了播放与转换,更重要的是免费,属于专门为无损设计的,感觉和win下的foobar相似。

至于VLC,也算是个挺好的播放器,这里的挺好指支持格式多,对于一些如rmvb等的格式虽然能播放,但是画质确实不敢恭维,有兴趣的可以尝试与real play对比一下,所以一直对VLC的播放质量有所怀疑,播放音频虽然听不出来什么,但是受心里作用影响总感觉不爽。VLC对APE的支持也不是太灵活,貌似没有配套的CUE就没法播放。另外VLC不支持格式转换,这点有点遗憾,所以留着万不得已的时候用下吧。

再谈下转换器,之前主要用一个叫iVideoConverter的软件,估计不怎么有名,转换质量也就那回事,但是要是APE转AAC的话的确有些不能接受,转换完也就是32kbps mp3的质量,各种恶心,转成mp3的话倒可以接收,不过对其质量也有不少怀疑。总体上Mac下的转换器有不少,但是质量都不高,还没有支持硬件解码的(或许是我没发现好的),还是win下的那个叫media什么的转换器靠谱点。

最后谈谈iTunes,不知道为啥大家都对iTunes没什么好感,在本人看来iTunes绝对是神器,不知道大家有这样的经历没,往mp3里面拷贝歌曲,分类建立文件夹,重命名什么的,还有ID3信息不全等,有点“洁癖”的一折腾都折腾半天。iTunes的强大之处就是让你完全不必考虑文件夹的问题,歌曲自动按专辑,作者等分布到各个文件夹中,我们只需要管理好歌曲的信息即可(歌曲信息,封面等可以用CoverScout和SongGenie来补完)。iTunes的智能播放列表也十分强大,另外iTunes也是可以转换歌曲的,支持mp3、AAC、Apple Loseless等格式的转换,还可以通过设置播放起止时间后转换来分割音乐文件。总之如果你的曲库大小在几个G及以上的时候使用iTunes是相当方便的,如果你还有iDevices那就更爽了,歌曲的管理就会超方便,完全没有以前那种在Mp3里面折腾文件的感觉了。

好了有点跑题了(这是有点么: [ ),总之就是转换无损推荐XLD,转换后扔进iTunes里(有个自动添加到iTunes的选项),不喜欢iTunes的直接用XLD/VLC播放。

Tagged with:  

XCode SVN 设置指南

On 04/27/2011, in Development, iOS Dev, Mac Dev, 折腾, by ultragtx

经初步测试,使用本文的方法,可以解决文件丢失,commit错误(Error: 155005  Working copy not locked..等)等问题

  • 修改svn配置文件
svn的配置文件在~/.subversions/config
修改方法:
1.找到 global-ignores 一行,去掉注释用的“#”,编辑(添加)成 global-ignores = build *~.nib *.so *.pbxuser *.mode *.perspective*
2.找到 enable-auto-props = yes 把注释去掉(这步似乎可以忽略)
3. 在[auto-props] Section添加以下内容
     *.mode* = svn:mime-type=text/X-xcode
     *.pbxuser = svn:mime-type=text/X-xcode
     *.perspective* = svn:mime-type=text/X-xcode
     *.pbxproj = svn:mime-type=text/X-xcode
 
关于修改配置文件的更多讨论在这里
 
  • SCM Config
XCode 菜单中 SCM >> Configure Repositories
 
按 “+” 添加一项
     Name:任意
     URL:svn://USERNAME@svn.footoo.org/opt/ibmtc/SUBPATH 然后按tab切换 下面那几个除了Password都自动填好了
     Scheme: svn
     Host:svn.footoo.org
     Path:/opt/ibmtc/SUBPATH
     User: USERNAME
     Password: PASSWD
下面有个指示灯,如果显示绿色并有Authenticated字样则表示设置成功
  • 添加项目
1. 如果不是新建的项目 直接到第二步 SCM >> Repositories 选择好对应目录 点Import选择想要进行版本控制的项目(最好是“干净”的项目 即没有.svn文件夹 否则可能有一些错误)
2. 在刚才的窗口选择刚添加的项目 Check out,相当于用svn对项目进行初始化,加入一些控制信息。这一步很重要,缺失了将不能进行版本控制
3. 打开Check out下来的项目 打开项目属性窗口 >> General >> Config Roots & SCM…  下拉按钮选择Subversion 下面的table中的Repository选择你之前在Configure Repositories中添加的那个,一般都会有Recommended字样
 此时在菜单 SCM中就多出了很多项目
在左边的项目树中,邮件点击表头,选择SCM可以多出一栏现实项目修改信息
文件的标示状态简介如下: 
Tagged with:  

Cocoa中的weak reference

On 04/20/2011, in Development, iOS Dev, Mac Dev, by ultragtx

以下所有内容翻译自官方文档,如有不当之处还请各位指正。

Weak Reference to Objects(弱引用)

————————————————————————————————————

retain 一个 object 创建一个 “Strong” reference,一个object在直到它所有的strong reference都release了之后才能dealloc,因此object的生命周期是受它的Strong reference的所有者控制的。某些情况下,这种行为不是我们所期待的,你也许想有一个不会阻止一个object dealloc的reference,这种情况下,你就拥有一个“Weak” reference,weak reference是通过存储一个不retain相应的object的指针所创建的。

 
weak reference在会有循环reference要创建时是必要的。比如,如果Object A和 B之间互相Communicate,它们各自需要一个对方的reference。如果它们各自retain了对方,那么直到它们之间的Connection切断之前它们之中任何一个都不会dealloc,但是它们之间的Connection要等待它们其中任意一个dealloc了之后才能切断,这就产生了一个矛盾。要解决这个问题,其中一个object作为一个次级(subordinate)角色并且拥有对方的一个weak reference。一个具体的例子,在一个view继承体系中,一个parent view拥有并因此retain他的childe views,但是一个child view不拥有它的parent;而又必须知道它的parent是谁,所以就有一个指向它的parent的weak reference。
 
Cocoa中另一些weak reference的例子包括但不局限于这些:table data sources,outline view items,notification observers,各种targets和delegates。(比如一个NSTableView不会retain它的data source,一个NSApplication不会retain它的delegate)
 
当你需要向一个你只拥有weak reference的object发送消息时,就要小心,那个object是不是已经dealloc了,如这这样会使你的程序Crash。
后面又是一些例子(delegate 和notification),不翻译了。
Tagged with: