iCloud 部分功能开始生效

iCloud虽说要到秋季才发布,但其部分功能已经开始生效了.

如果你同意了iTunes的最新条款并通过电脑或者其他设备在iTunes Store下载了新的音乐,App或书籍你的iDevices就将受到如下推送通知:You downloaded an app from your computer. Turn on Automatic Downloads to receive apps on this device without having to sync.

在偏好设置>>Store,就可以看到新的选项,如图所示:

可以让你的iDevices不需要与电脑连接而自动同步(不如说是下载)你通过电脑或者另一台iDevice在iTunes Store购买的音乐,App和书籍.详情可以参考官方的说明

–以上–

WordPress Google +1 插件

更新:似乎在国内环境下,这个插件目前有很大问题,不知是Google的原因还是插件的原因,现在G+的插件也不止一个,大家可以尝试其他的.

Google +1按钮终于正式发布了,急着要给你的wordpress添加这一功能了么?只要访问这个地址,选择适合你的按钮样式,copy生成的代码到你想要的地方就可以了(不过还是要注意一下相应条款).

麻烦是么?其实一个插件就可以搞定了,在你的wordpress后台,添加新插件,搜索Google +1 Button,安装并启用即可,插件后台设置一目了然,插件效果可以参考本本站.(插件主页地址)

–↓↓↓这个按钮就是,可以点下试试效果–

Mac免费App推荐:myPeers

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

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

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

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

–以上–

关于lvalue required as left operand of assignment

这种错误发生的其中一种情况:

UIView *aView;
aView.frame.size = …….;

第二行会报错,提示lvalue required as left operand of assignment

这里有关于这个错误的解释:

点操作符有两种用法:

1.调用成员变量的getter setter

2.访问结构体

当在等号左边时这两种不能混用,右边可以,所以还是要用这种方法来实现:

aView.frame = CGRectMake(…..)

这只是lvalue required as left operand of assignment错误出现的一种情况,估计其他的也可以类比解决

–以上–

[转载]51条Mac技巧

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

关于initWithCoder导致的内存泄露

initWithCoder一般是通过[NSUnarchiver unarchiveObjectWithData:NSData]调用的, 虽然我们可能感觉代码写得没有什么问题, 但用Performance Tool检测还会有leak. 如果你确定自己的代码没有任何问题, 那么就可以无视Performance Tool的检测. 之所以会检测到内存泄露, 一个可能的原因就是unarchiveObjectWithData:返回的是一个autorelease对象, 而在Performance Tool检测时, autoreleasePool还没有释放, 因此我们可以尝试直接在unarchiveObjectWithData:这个方法附近范围新建一个autoreleasePool然后release它(参考main.m中autoreleasePool的创建和release), 如果Performance Tool不再提示内存泄露, 那么就证明的确没有内存泄露了.

可以参考这里的讨论

–以上–

Objective-C: delegate的那点事儿

Delegate算是Objective-C的一大特性, 关于Delegate的基础就不多介绍了, 有兴趣的请参看文档.

这里仅对Delegate使用中的一些问题做点讨论

我们用Delegate很多情况下是基于多线程的,比如我们有一个ViewController在这个Controller里面进行了一个下载图片的操作,下载成功后需要通过protocol来现实下载成功, 但是当ViewController已经被release,而下载工作才结束, 那么下载工作的[delegate didFinishDownload] (暂且就这么命名吧) 就会产生一个异常,因为你给一个deallocated的对象发送了一个消息.

那么,如何解决这个问题呢,首先我们可能想到用if (delegate == nil) 来判断delegate是否存在,但其实这是不行的,因为已经dealloc的对象并不是nil.要知道Objective-C中给nil发送消息是可以的,所以如果这种方法可行,其实我们就根本不需要if这句,[delegate didFinishDownload] 给nil发送了一个消息也不会出现异常,因此这种方法只是重复了上面的错误.

还有一个叫[delegate respondsToSelector:SEL]来判断delegate是否响应一个Selector, 根据上一段的描述,我们也可以判断出这个也是不行的.这里额外提一点关于respondsToSelector的东西,要使用这个方法,必须有@protocol MyProtocol <NSObject>,因为respondsToSelector是NSObject的一个protocol方法.

既然要防止delegate被release,那么retain这个delegate是否可行呢?这么做虽然避免错误的发生,但是也产生了另一个问题,这就关系到Objective-C内存管理中的Retain Circle, 即:有A,B两个Object, A中有一个B的实例变量,B中又有一个A的实例变量,要release A就必须releaseA中的B,而要release B有必须release B中的A,这样就产生了一个Retain Circle,A B都不能被dealloc.解决Retain Circle的方法就是使用弱引用(weak reference),弱引用没有被引用的那个Object的所有权,也就不需要release它,从而解决了Retain Circle问题.为了防止Retain Circle的发生, delegate通常都是弱引用的, 因此我们一般不应该retain一个delegate.但是似乎有一个例外:NSURLConnection, 网上对其的讨论结果是:NSURLConnection会retain它的delegate,详细可以参考StackOverflow上的这个问题

似乎没有简单可行的方法来解决这个问题(至少在本文发表时我还没有找到),那么我们只能在通过程序结构的设计来解决这一问题了,对应不同的程序自然也就有不同的解决方法,我想到的一种就是在这个ViewConrtoller被release的时候,把下载方法中的delegate设置成nil即可(目前测试可行, 如有错误还请指正).

更新几种解决方法:

–以上–

Mac OS下无损音乐的播放与转换

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播放。

UITableViewCell的selecte与deselect

首先要从一个我遇到的问题谈起,一个基于NavigationBar的App,开始时我有一个UITableViewController,其中每个UITableViewCell点击后都会push另一个ViewController,每次点击Cell的时候,Cell都会被选中,当从push的ViewController返回的时候选中的Cell便会自动取消选中(有动画效果)。后来由于某些原因我把这个UITableViewController改成了UIViewController,之后就产生了一个问题:每次返回到TableView的时候,之前选中的Cell不能自动取消选中,经过查找得知:

UITableViewController有一个clearsSelectionOnViewWillAppear的property,

而当把UITableViewController修改成UIViewController后,这个属性自然就不存在了,因此我们必须手动添加取消选中的功能,方法很简单,在viewWillAppear方法中加入:

[self.tableView deselectRowAtIndexPath:[self.tableView indexPathForSelectedRow] animated:YES];

即可,估计UITableViewController也是用类似的方法来实现取消选中的功能的。

–以上–