文章列表
最近的工作中比較頻繁的用到了Block,不在是以前當(dāng)做函數(shù)指針的替代或者某些API只有Blocks形式的接口才不得已用之了,發(fā)現(xiàn)自己對(duì)其了解還是太淺,特別是變量的生存期,按慣例還是翻譯官方文檔,原文鏈接。
介 ...
UIInterfaceOrientation和UIDeviceOrientation長(zhǎng)得是又長(zhǎng)又像,長(zhǎng)久時(shí)間我根本沒(méi)有區(qū)分這兩個(gè)類型,肯定也混用了無(wú)數(shù),直到我現(xiàn)在處理的一個(gè)問(wèn)題,明明是橫/豎屏的情況,控件卻是以豎/橫的布局展示,而且我在模擬器上怎么都搞不出來(lái),而測(cè)試稍微把機(jī)器轉(zhuǎn)轉(zhuǎn)圈就能重現(xiàn)這個(gè)現(xiàn)象。
那么定位的方向很明確,肯定是在willRotateToInterfaceOrientation之類的函數(shù)里咯。于是我看到了這樣的代碼
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOr ...
項(xiàng)目需要在程序里即時(shí)設(shè)定語(yǔ)言,而非iPhone默認(rèn)的設(shè)置。因?yàn)楝F(xiàn)在的項(xiàng)目已經(jīng)比較繁雜,而且有時(shí)候是視圖直接加載,有時(shí)候是使用導(dǎo)航欄,有時(shí)候又是addSubView等等不足一一道,而且每種視圖還可能有不同的入口,總之管理起來(lái) ...
一直很想把設(shè)計(jì)模式做起來(lái),但是一方面,項(xiàng)目籌劃的時(shí)候空想很多模式,但是卻不下手去做,項(xiàng)目實(shí)際開始了又狂趕代碼,沒(méi)空去注意,這導(dǎo)致我對(duì)模式的理解和運(yùn)用一直不深。中途我也無(wú)數(shù)次拿起<設(shè)計(jì)模式>看,但是都很難堅(jiān)持,后來(lái)想通了,模式用得到就用上,用不到不必勉強(qiáng),我記住這些模式的適用范圍,然后在實(shí)際開發(fā)的時(shí)候,如果發(fā)現(xiàn)似乎應(yīng)該用到某個(gè)模式,那么就拿過(guò)來(lái)參考,同時(shí)對(duì)已經(jīng)用上手的模式不斷加深印象和熟悉實(shí)質(zhì),能用上才是必須學(xué)的。
看過(guò)著名的用ruby踩四人幫的帖子,特別是對(duì)其很多模式其實(shí)是語(yǔ)言特性貧乏的癥狀很贊同,但總結(jié)經(jīng)驗(yàn),提取共識(shí)并加以類比,我相信還是有益處的。
做windows客戶端 ...
plist文件廣泛使用在Mac系統(tǒng)上,iPhone程序也在很多地方直接操作該文件。該文件類型實(shí)際上就是個(gè)XML,而且格式相當(dāng)簡(jiǎn)單一致,這里給文件結(jié)構(gòu)給出講解,也順便復(fù)習(xí)一下快忘光的java。
首先plist是xml,版本1.0,字符集始終采用utf-8,然后DOCTYPE是plist,publicID和systemID也是固定的值,然后就是標(biāo)準(zhǔn)的plist節(jié)點(diǎn),這個(gè)節(jié)點(diǎn)將視為根節(jié)點(diǎn),對(duì)應(yīng)在plist視圖中的Root,注意根節(jié)點(diǎn)有一個(gè)屬性是version,一般是1.0。
每個(gè)節(jié)點(diǎn),包括根節(jié)點(diǎn)都有其類型,分容器型和值型,容器型有DICTIONARY和ARRAY,DICTIONARY就 ...
規(guī)范上NSString做屬性都是寫成copy的,理論上應(yīng)該是復(fù)制了字符串而不是單純的增加引用計(jì)數(shù),其實(shí)問(wèn)題只會(huì)出現(xiàn)在把NSMutableString賦值給NSString的時(shí)候。
@interface Demo : NSObject
{
NSString *retainString;
NSString *copyString;
}
@property (nonatomic, retain)NSString *retainString;
@property (nonatomic, copy)NSString *copyString;
@end
@im ...
Objective-C搞了很久了,結(jié)果現(xiàn)在還是對(duì)起內(nèi)存管理與對(duì)象初始化一知半解,還好都是些移動(dòng)開發(fā)沒(méi)出太大問(wèn)題,不過(guò)現(xiàn)在的一個(gè)模塊化應(yīng)用上對(duì)語(yǔ)言的使用要求更加嚴(yán)格了,還是從官方文檔搞起吧,原文是Allocating and Initializing Objects
(鏈接經(jīng)常變,不保證可用),出自Introduction to The Objective-C Programming Language
,也是Memory Management Programming Guide
的理解前提。
對(duì)象分配空間與初始化
對(duì)象分配空間與初始化
使用Obje ...
可能是之前Windows開發(fā)慣了,做下載模塊的回調(diào)的時(shí)候都是直接對(duì)回調(diào)函數(shù)進(jìn)行調(diào)用的,不過(guò)這在現(xiàn)代語(yǔ)言構(gòu)建的應(yīng)用上,如果子線程觸發(fā)了UI操作,有可能會(huì)core掉,在iPhone里特別是對(duì)UIWebView。所以不得不在所有回調(diào)方法里用performSelectorOnMainThread。但這個(gè)方法實(shí)在太爛了,首先主體要是NSObject,參數(shù)還只能有一個(gè)Object的NSObject,不能多參,而回調(diào)的時(shí)候完全可能回返id和錯(cuò)誤碼等等信息,所以就得寫成數(shù)組,然后再分解,同時(shí)還要加上類型,根據(jù)類型分解數(shù)組并調(diào)用不同的回調(diào)。
實(shí)在太傻了所以我想找別的替代方法,搜了一下void dispat ...
總覽
在Xcode的iPhone SDK
3.0之后,已經(jīng)內(nèi)置了單元測(cè)試的功能,開發(fā)者可以借助單元測(cè)試寫出更健壯更正確的代碼。本文使用的SDK版本是3.2.3。
Xcode提供了兩種單元測(cè)試方式,分別是邏輯測(cè)試與應(yīng)用測(cè)試,邏輯測(cè)試用于檢驗(yàn)? ...
概念介紹
這里的閉包自然是計(jì)算機(jī)語(yǔ)言中的閉包,詞法閉包(Lexical
Closure)的簡(jiǎn)稱,主要表現(xiàn)在函數(shù)可以引用到自由變量,并且可以脫離變量的創(chuàng)建環(huán)境,再?gòu)?fù)雜的定義也不需要多說(shuō)明了,可以理解為面向?qū)ο罄锩娴某蓡T
函數(shù)可以調(diào)用其成員變量,然其概念卻比面向?qū)ο蟮母拍盍餍性绲亩?,約六十年代在Scheme里就實(shí)現(xiàn)了。函數(shù)式編程語(yǔ)言里這是極為常見的概念,而非函數(shù)式
的語(yǔ)言中js里也有很多閉包出現(xiàn)的身影。
Objective-c的閉包
準(zhǔn)確地說(shuō)在Objective-c里不叫閉包(Closure)而叫Block,但概念還是大同小異的。Mac平 ...
當(dāng)前需求
在做登錄模塊時(shí),需要做登錄的歷史記錄,存儲(chǔ)本機(jī)所有登錄的用戶的用戶名密碼,以及登錄策略如是否記住密碼,是否自動(dòng)登錄等。具體實(shí)現(xiàn)之前,我認(rèn)為
這個(gè)需求看樣子并不需要SQLite,因?yàn)榈卿浻脩舨豢赡芴?,而且存?chǔ)的字段也就四個(gè)而已,估計(jì)用NSUserDefaults存一下數(shù)組就結(jié)了。
初遇困難
令我沮喪的是,這么一個(gè)明確的需求竟然一時(shí)半會(huì)都沒(méi)有完成,用戶登陸信息明明很簡(jiǎn)單的
@interface LoginUserInfo : NSObject
{
NSString *username_;
NSString *passwor ...
一般在iPhone開發(fā)中,除了在使用c函數(shù)時(shí)不得不使用char*作為字符串參數(shù),我們都會(huì)選擇NSString類型的字符串作為首選。
NSString比起char*當(dāng)然好的不是一星半點(diǎn),安全,易用性甚至包括字符編碼都是很不錯(cuò),但相對(duì)Java中的String有 ...
加速計(jì)是iPhone非常吸引人的特性之一,借由本特性產(chǎn)生了很多極具創(chuàng)意的游戲和便于用于的操作,令人驚嘆的使用加速計(jì)無(wú)疑對(duì)開發(fā)iPhone程序是加分的亮點(diǎn)。
iPhone內(nèi)置的加速計(jì)是三維全方向感知的,手機(jī)平面左右兩側(cè)對(duì)? ...
目前又有了一個(gè)想在iPhone上做協(xié)助調(diào)試的設(shè)想,當(dāng)然控制權(quán)什么的是別說(shuō)了,就是做一些協(xié)助方在自己屏幕上點(diǎn)點(diǎn)劃劃,被協(xié)助方也要有同樣的操作,因?yàn)楸徽{(diào)試程序的不確定性,那只能做成發(fā)送各種針對(duì)屏幕的模擬事件了。
因?yàn)閍pple沒(méi)有放出直接發(fā)送觸屏事件等的API,所以用的都是越獄的iPhone加上PrivateFramework,根本沒(méi)指望上市,反正就是為了內(nèi)部調(diào)試。
首先在kennytm的網(wǎng)站拔下私有framework的頭文件,就本應(yīng)用而言,只需要GrapicsServices文件夾以及Availability2.h即可。然后導(dǎo)入Xcode目錄下Platforms下對(duì)應(yīng)的GraphicsServic ...
最近的項(xiàng)目里經(jīng)常用,所以順手翻譯一下,也增強(qiáng)了解,同樣無(wú)版權(quán)不保證內(nèi)容正確性,原文地址
do shell script in AppleScript
這篇技術(shù)要點(diǎn)回答了AppleScript中的do shell script命令中經(jīng)常被問(wèn)及的問(wèn)題,該命令自AppleScript1.8后引入
文本講 ...
用*nix肯定沒(méi)有不用grep的,據(jù)說(shuō)這玩意還是HR的最愛,簡(jiǎn)單的用可以輕松刷選簡(jiǎn)歷之類的,只要看里面有沒(méi)有相應(yīng)技能關(guān)鍵字就成了。
其實(shí)它還是挺強(qiáng)的,甚至于可以做逆向環(huán)視,不過(guò)我還不清楚它如何輸出捕獲型括號(hào)里面的內(nèi)容
set fastComp to do shell script "defaults read com.apple.Xcode PBXCustomTemplateMacroDefissnitions|grep -Po \"(?<=ORGANIZATIONNAME = \\\")([^\\\"]*)\"" ...
MacOSX確實(shí)是個(gè)相當(dāng)好用的系統(tǒng),無(wú)論是對(duì)普通用戶還是開發(fā)者,比如很方便的defaults,一行shell就可以任意存取一些鍵值信息,而且可加域名控制和字典形式的鍵值,無(wú)需關(guān)心令人煩惱的持久化。
一開始的用途是在Xcode新建文件時(shí)修改公司名,用法也很簡(jiǎn)單
defaults write com.apple.Xcode PBXCustomTemplateMacroDefinitions -dict ORGANIZATIONNAME "Your Company Name"
重啟過(guò)Xcode就會(huì)發(fā)現(xiàn)原本的那些__MyCompanyName__全部被替換 ...
蘋果的文檔比起MSDN或者JDK的注釋那是太垃圾了,我就幾乎沒(méi)有遇到過(guò)沒(méi)有錯(cuò)誤的情況,這還是在我根本不深入的情況下,沒(méi)有代碼sample相比都根本不算問(wèn)題。
比如我sed想做文件原地的替換,但是怎么寫都出錯(cuò),錯(cuò)誤提示還莫名其妙,后來(lái)多方搜索才知道Mac上的sed如果參數(shù)有-i就必須加上備份指令,即-i后添加任意字符,那些字符就作為備份文件的后綴名,
可恥的man上卻寫得好像是可選的一樣。
煩人的是即使sed沒(méi)有做替換它還是會(huì)備份文件,相當(dāng)?shù)睦速M(fèi)。
這幾天利用shell處理問(wèn)題真是相當(dāng)開眼界了,不愧是Unix系統(tǒng)的精髓,就像現(xiàn)在有一個(gè)需求,要把不同文件里的文件占位符替換成該文件的 ...
文中資料來(lái)源主要是《AppleScript跟我學(xué)》的中文譯本以及Apple的的Technical Note
AppleScript是用在MacOSX上的腳本語(yǔ)言,和操作系統(tǒng)結(jié)合的相當(dāng)緊密,不過(guò)一般來(lái)說(shuō)我也沒(méi)興趣學(xué)一門應(yīng)用不太廣泛的專屬語(yǔ)言,但一來(lái)是項(xiàng)目需要,而且這個(gè)語(yǔ)言確實(shí)好用并且簡(jiǎn)單易學(xué),就當(dāng)消遣消遣好了。寫好的腳本可以用NSTask很方便的執(zhí)行,而腳本本身幾乎什么都能做。
編輯器可以選擇自帶的Apple Script Editor就在應(yīng)用程序的實(shí)用工具下面,應(yīng)付是絕對(duì)夠了,需要代碼提示的話請(qǐng)把偏好設(shè)置中的“使用腳本助理”勾選,而代碼提示的輸入是用Esc鍵,當(dāng)然你也可以選擇Xc ...
必須要說(shuō)這玩意還是挺強(qiáng)的,直接實(shí)現(xiàn)了iPhone平臺(tái)上的自動(dòng)化測(cè)試,而且是模擬器真機(jī)通吃,調(diào)起來(lái)也不算多難,iOS 4之后原生支持。
下面是牢騷:首先這自動(dòng)化測(cè)試的腳本還得用js編寫,這需要測(cè)試人員掌握一定的編碼能力?? ...
記錄一下平時(shí)開發(fā)工作中的一些經(jīng)驗(yàn)和問(wèn)題解決的積累,仍然是沒(méi)什么體系可言。有些是轉(zhuǎn)自項(xiàng)目組的集體智慧。
使用Mac操作系統(tǒng)不太習(xí)慣,它很多組合建都是用到Command,但項(xiàng)目組沒(méi)錢買Mac真機(jī),都是?? ...
原文Google Objective-C Style Guide
iPhone項(xiàng)目新成立,也沒(méi)有編碼規(guī)范的積累,項(xiàng)目組本來(lái)是想拿老的C編碼規(guī)范套用的,但評(píng)審一下就發(fā)現(xiàn)問(wèn)題多多,之后找到了Google的Objective-C的編碼規(guī)范,大家就先翻譯一下咯
聲明這是無(wú)版權(quán)翻譯,也不對(duì)任何錯(cuò)誤負(fù)責(zé),不保證文章的完整性,我到現(xiàn)在也認(rèn)不全語(yǔ)法。
(大半年的事后,決定對(duì)這份文檔做重審,當(dāng)然不是對(duì)修辭手法,而是處理內(nèi)部的硬傷)總覽
背景知識(shí)
Objective-C是一個(gè)C語(yǔ)言的擴(kuò)展語(yǔ)言,非常動(dòng)態(tài),非 ...
因?yàn)轫?xiàng)目組正在做IPhone的項(xiàng)目,公司內(nèi)部既無(wú)積累更無(wú)經(jīng)驗(yàn),就想起一個(gè)先行示范的表率,以前就一直想搭建的Wiki服務(wù)器正好就一鼓作氣拿下了。
公司的Windows操作系統(tǒng)閑置機(jī)器很多,本來(lái)是想在Windows上搭建的,但匆匆找了半天,要么要裝虛擬機(jī),要么不穩(wěn)定,加上我也很想多習(xí)慣MAC系統(tǒng),所以還是選擇了在MAC上搭建,選擇的Wiki版本是MediaWiki,也是大名鼎鼎的維基百科使用的版本。提一下本機(jī)操作系統(tǒng)版本是10.6.3,非蘋果正品而是破解安裝在清華同方的某款機(jī)器上。
搜索一下就找到了MediaWiki的官網(wǎng),不出意外的是整個(gè)官網(wǎng)都是由自 ...
|
|