Posts Tagged mac

Objective C property

Objective C的属性定义时提供了一堆的修饰符,readonly, readwrite, assign, retain, copy, nonatomic,看代码都糊涂,看了一下《The Objective-C Programming Language》中有关属性定义的章节,节选如下:

  • Accessor Method Names 存取方法名称

属性对应的getter, setter默认的方法名称是propertyName和setPropertyName:,比如属性“foo”的存取方法是foo和setFoo:。

  • getter=getterName 指定属性的get存取方法名称。对于布尔型值会用is作为get存取方法的前缀。
  • setter=setterName 指定属性的set存取方法名称。如果属性是readonly,而指定了setter方法,会得到编译错误。

使用.是对getter和setter的简便的封装,两者是一致的。

  • Writablility 读写属性
  • readwrite: 默认。
  • readonly

在implementation块中使用@synthesize 自动生成getter/setter存取方法。

  • Setter Semantics setter方法语义
  • assign: 默认,表明setter使用简单的赋值,用于标量数据类型,如NSInteger, CGRect,或者不是你拥有的对象,比如delegate。retain和assign在GC模式下是一样的。
  • retain:用于对象赋值。前一个值会被发送一个release消息。Mac OS X v10.6以前只针对Objective-C对象类型有效,不能用于Core Foundation对象;但在v10.6以后可以使用attribute关键字标明Core Foundation属性在内存管理上和对象同样对待,比如:

@property(retain) __attribute__((NSObject)) CFDictionaryRef myDictionary;
  • copy:表明对象的拷贝用于赋值,前一个值会被发送一个release消息,拷贝通过调用copy方法实现。只针对对象类型有效,并且必须实现NSCopying协议。

不同的约束依赖于你是否采用GC:

  • 如果你没有使用GC,那么对于对象属性你必须严格标明是采用assign,retain或者copy,否则会得到一个编译器警告。(鼓励你想明白到底采用什么方式的内存管理。)

  • 如果你使用GC,那么默认情况下不会得到警告,除非属性类是基于NSCopying。

  • Atomic 原子性
  • atomic,默认。存取方法在多线程环境中提供更安全的存取。如果使用了retain或copy,而没有表明nonatomic,那么在引用计数的环境中,get存取方法使用锁来保持和释放要返回的值,类似于:

[_internal lock]; // lock using an object-level lock
id result = [[value retain] autorelease];
[_internal unlock];
return result;
  • nonatomic,直接返回值,效率更快。

注意:属性的原子性并不等同于对象是线程安全的。

  • Manage Ownership
  • weak
  • strong: default。

这个要和assign, retain, copy整合在一起看看Objective C的内存管理机制才行。

, , ,

Leave a comment

Mac book Pro升级

虽然用了Tmpdisk将内存虚拟成临时存储,但整体性能还是没有提升,所以最后还是选择对自己的老机器做一次升级,将内存从4G到8G,并在光驱位上安装一个SSD硬盘。

首先确定自己的主机配置情况,我是搞不太清楚的。到Check Your Service and Support Coverage,输入我的序列号:XXXXXXXXXXXX,得到的结果MacBook Pro (13-inch, Early 2011)。然后在如何识别 MacBook Pro 机型中可以看到,“MacBook Pro(13 英寸,2011 年初)MacBookPro8,1 MC724xx/A 13.3″/2.7 i7/2x2GB/500-5400
MC700xx/A 13.3″/2.3 i5/2x2GB/320-5400”,我的机器是i5。

可以看到最大内存是4GBx2 DDR3,也就是只能到8GB,内存的安装和拆卸还是比较简单的,参见如何安装或拆卸内存

比较麻烦的是光驱位安装硬盘,先是选择硬盘,可以在关于本机的system report – system information中看到,Link speed 是6Gb,SATA3 的接口,选择了Toshiba的2.5 SATA3 128G

拆机安装前重点参考了两篇文章:

我采用的也是Fusion Drive模式,把两个硬盘混搭,懒得自己去分别管理两个不同的硬盘。

安装基本还算顺利,注意的点是,卸下光驱的时候,在光驱左上角还有一颗隐藏的螺丝,不要硬拔。还有在安装完成后,使用Trim Enabler打开SSD硬盘的TRIM功能,以起到保护作用。

最后可以采用Disk Speed Test做一次磁盘读写的测试。这两天使用速度不错,感觉挺好。

, , , ,

11 Comments

没钱买SSD的人可以用内存做临时存储

在知乎上看到一个问题程序员如何优雅地使用 Mac?的回答,里面提到了一个mac上的工具TmpDisk,开源的内存磁盘管理工具,用来将你的内存虚拟成硬盘,加速文件的读写,缺点当然是关机或弹出磁盘文件就丢失了。不过这个貌似也看成是优点,你都不需要去考虑清理文件。

立即下载安装,设置好后,将我常用的下载目录(包括邮件附件)设置到该虚拟硬盘上,体验果然飞快啊。其实大多数邮件的附件下载下来并不需要长期保存,只要当时快速处理即可。这样只需要每天关机前将需要保存的文件转移到硬盘即可(刚好是一次整理过程),其他自动删除,爽。

没钱买SSD的人有福了,不过速度越快,心倒是更痒了。

, , , ,

Leave a comment

spotlight搜索不到明明存在的文件

刚想找个几个月前的文件,文件名也不记得了,先到gmail搜索邮件,然后把找到的文件名贴到spotlight,满心想可以立马得到搜索结果了。神奇的是居然啥结果也没有,难道都被我删除了,不应该啊!

无奈只好到目录层级中一级级地找,找了4级才找到。不过这就奇怪了,明明文件存在,为啥spotlight找不到呢?这都是半年没更新的文件了,何况也没提示索引更新啊?google了一下,貌似spotlight也存在工作不正常的时候,于是重新re-index,操作方法是在System Preferences中选择Spotlight,在Privacy中增加失效的目录到阻止索引的清单中,完成后确认,再在Privacy中删除该目录,这样目录中的文件就会被重新索引了。

在Spotlight中再输入文件名,搜索正常。

BTW. Spotlight中找到文件后,输入Command+Enter,可以直接打开文件所在目录,还是挺方便的。

, , , , ,

Leave a comment

在mac lion 设置802.1X使用证书连接有线网络

之前在知乎上提过一个问题“在mac lion 设置802.1X如何使用证书连接有线网络”,后来自己解决了,也是自问自答。

不过当时描述的比较简单,有朋友问起,都忘了,再重新整理一下。

先是得下载工具iphone configuration utility,安装后运行。

  1. 点击“Configuration Profiles”,New一个,在General中填写Name, Identifer,界面如图:
    config1

  2. 在Credentials中,选择Configure,会提示选择证书,找到管理员提供的证书后继续,填写证书密码。
    config2

  3. 在Wi-Fi 中,选择Configure,我们如果是连有线网络的认证,可以随便输入SSID,选择Security Type,这个要看你的有线网络认证类型了,我选择WPA/WPA2 Enterprise,会出来相应的协议和验证要填写,如图:
    config3

  4. 还是在在Wi-Fi 中,勾选完协议后,再选择”Authentication”,你需要在Identity Certificate中选择之前设置的证书。

  5. 至此iphone configuration utility中设置完成,点击Export导出为.mobileconfig文件。

  6. 双击倒出的.mobileconfig文件,会提示我们导入user profile,此时按提示操作,最后点击Install即可。

  7. 成功导入后,在System Preferences中,你应该看到一个新的图标Profiles在System下,点击Profiles可以查看导入的信息。
    config4

  8. 在System Preferences中,点击Network,选择Ethernet,点击Advance,tab选项中就会看到有802.1X,里面就有会有新增的配置profile。图上显示的profile名称和前面的设置不同,主要是我前面的截图是为了示例新建的,后面并没有实际导入。
    config5

  9. 插入网线,应该会做验证,你也可以在Ethernet中,连接802.1X。

大致就是这样了,希望能有所帮助。

, ,

Leave a comment

碰上一个关不掉的文档

朋友发过来一个office word文档,能正常打开,但每次关闭后Word就崩溃了。

Microsoft Error Reporting

可恼的是不论我是否选择“Recover my work and restart Microsoft Word”,重启word后这个文档就又打开了,导致我就不断地关闭文档,word崩溃,再打开。陷入死循环了。

后来用了最土的一招,把文档的内容全部删除再保存,关闭时总算不崩了,吐血。

PS. 现在关闭还是不行,但不选择“Recover my work and restart Microsoft Word”重启Word,也不会打开那个该死的文档了。

PS2. 大概windows office是否又升新版本了,现在老碰上文档的兼容性问题。

, ,

Leave a comment

关于pow的使用

pow 一个小工具,在Mac下使用rack开发时方便采用域名来访问,而无需localhost:xxxx。安装和使用都很简单。

  • 安装:
    $ curl get.pow.cx | sh 
  • 使用:在~/.pow目录中创建到rack应用的符号链接,然后访问域名http://myapp.dev 即可。
    
    $ cd ~/.pow
    $ ln -s ~/Projects/myapp
    
  • 可以查看服务进程是否启动:$ ps -ef|grep pow
  • 如果需要重启服务进程 $ touch ~/.pow/restart.txt
  • 查看日志 $ tail -f ~/Library/Logs/Pow/access.log

使用时碰到一个问题,安装后访问http://myapp.dev 没有任何反应,查了以为是.dev resolver doesn’t “register” properly
,结果是自己给chrome设置了翻墙代理。

, ,

Leave a comment

brew安装程序包如何绕开墙的办法

上次说过用brew安装应用的时候碰上“curl: (7) couldn’t connect to host 的问题”,去掉了代理访问虽然正常了,但由于很多应用还是托管在sourceforge上,而sourceforge由于被墙的缘故,所以使用brew安装的时候还是会报错。

象我安装ImageMagick的时候,就出现:

$ brew install ImageMagick

Warning: Your Xcode (4.4.1) is outdated

Please install Xcode 4.6.

==> Downloading https://downloads.sf.net/project/machomebrew/Bottles/imagemagick-6.8.0-

curl: (56) Recv failure: Connection reset by peer

Warning: Bottle installation failed: building from source.

==> Downloading http://downloads.sf.net/project/machomebrew/mirror/ImageMagick-6.8.0-10

curl: (56) Recv failure: Connection reset by peer

Error: Download failed: http://downloads.sf.net/project/machomebrew/mirror/ImageMagick-6.8.0-10.tar.gz

如何解决这个问题呢?有多种方法:

  1. 一是跳过下载步骤,事先下载程序包,放到/Library/Caches/Homebrew/ 目录中,就可以继续。不过讨厌的是你不知道需要依赖多少个包的时候,这一个个下实在是浪费功夫。
  2. 修改下载目标源,直接把sf.net的地址给替换掉,一样麻烦。
  3. 使用代理,让curl通过代理来访问。编辑$HOME/.curlrc文件,增加“–socks5 127.0.0.1:1080”即可(替换成你自己的代理),这样你在brew install安装的时候,相应curl就会通过socks代理访问,从而成功下载完成安装。方便简单,就是你需要自己设置一个socks代理。

, , , ,

Leave a comment

curl: (7) couldn’t connect to host 的问题

使用Cloud Foundry过程中,vmc push 遇到错误“net/http.rb:799: [BUG] Segmentation fault”,原因见:Fixing a Segmentation Fault in Ruby 1.9.3 ,主要是vmc用到了openssl库,和使用MacPorts依赖的库产生冲突。(这个问题下次再说)

查问题的时候,发现抱怨MacPorts较多,选择用Homebrew替换MacPorts,卸载了MacPorts,安装Homebrew,使用命令:

$ brew install wget

测试出现错误:“curl: (7) couldn’t connect to host”。

$ curl -v http://localhost

发现开始就去连接本地的socks proxy 服务器,而我又没起该代理服务器。于是连接上代理服务器,再做测试,提示:“Empty reply from server mac”。

干脆去掉默认代理连接,打开.bash_profile,注释:

#export http_proxy='http://localhost:1080'
$ curl localhost
<html><body><h1>It works!</h1></body></html>

一切就正常了。

, , , , , ,

1 Comment

采用markdown来编写文档

很多时候记会议纪要,用word写吧,觉得太笨重,慢;用文本写,写标题1, 2, 3, … 结果前后一调整,或者插入/删除一行就要去重新调整序号,实在难受。随它去呢,又让我这种偏执的人感到别扭。

讨厌在书写的时候要考虑格式的设置,markdown确实是一个很好的解决方法,好好学学,强迫自己习惯markdown的编写。最基本的编写也就那么几个:

  1. 用几个#号来标识标题。
  2. 段落的写法,第一个是数字,那就按数字1,2,3排,非数字就是符号排的段落,第一个字符用-, *, + 都可以。
  3. 链接的写法,最简单的就是中括号里写文字,后面小括号里写链接,相同主机内可以使用相对路径。
  4. 对写代码的人来说,还有一个要记住的是用反引号`把代码给括起来。

我觉得有这么几招就差不多了,顶多用两个星号搞搞粗体、一个星号斜体,详细的使用帮助可以参见markdown语法说明

“工欲善其事,必先利其器。”

首先,我得选择一个文本编写工具来替代Stickies,支持markdown,简单一点,能自动保存。Mou 不够简单,还是觉得nvALT 不错,简洁得很,同时支持Simplenote 的云服务。(Simplenote 同时提供iphone/ipad下的客户端应用,虽然Simplenote 在国内访问貌似不畅。)

其次需要能把markdown文件转成html文件,将格式内容进行保存或者发布到博客中(我一般还是会保存在Evernote中,话说Evernote什么时候能支持markdown啊)。nvALT 本身能提供预览并保存html文件。另外mac下还有两个不错的工具:

  • 一个是chrome扩展Markdown here 对于使用gmail的人来说有帮助,先用markdown写邮件,然后使用该插件Markdown Toggle做一次转换即可;
  • 一个是md ,提供了mac OS下的一堆服务,让你在文本编辑下右键菜单出现一堆常用的markdown服务。

最后再推荐gollum ,基于git 的个人wiki管理工具,和nvALT 配合(nvALT 本身也能提供页面的跳转,够强大吧),一个写markdown文件,一个提供wiki页面和搜索。

先写这么多,等使用时间长了,有心得再做更新,这篇文章就是基于nvALT 写的。

, , ,

Leave a comment