IOS學習之番外:開發中的那些瑣碎

來源:互聯網
上載者:User

整理了一個多月開發中的一些小問題,當然,本身遇到問題肯定還有更多,

比如類別的一些使用的技巧,協議格式的一些特殊字元,

同步於非同步網路處理的選擇,資料的儲存選擇,類的設計。

因為其實大部分ios互連網應用的技術含量不會是很深奧,基本到後來發現就是對UI控制項的一些需熟能生巧的應用,網路編程以及邏輯的處理,

更多的還有是一些經驗和積累。

這邊是幾個早期的問題,也就是一個開發開始一個禮拜中一些問題我還做記載,後面一個月進度匆忙,也就懶於記錄

1.UILabel中顯示多行時,自動換行。

label.numberOfLines =0; label.lineBreakMode = UILineBreakModeWordWrap;

前提是該label設定的frame是足夠大的。不支援滾動。

理論上不支援這麼做,因為TextView控制項相對來說更好

2.nil和release區別

nil和release的作用:
nil就是把一個對象的指標置為空白,只是切斷了指標與記憶體中對象的聯絡;
而release才是真正通知記憶體釋放這個對象。

所以nil並沒有釋放記憶體,只有release才回真正釋放記憶體。
再分析一下二者使用的先後順序:
如果沒有release就直接nil,那麼雖然不會出錯,卻等於自己製造記憶體流失了,因為nil之後release就已經不起作用了。

相反,如果在使用介面對象時只僅僅release沒有設定self.myOutlet = 
nil,那麼程式可能也不會報錯,但卻會十分不穩定、不健壯,很容易發生崩潰現象。

因為一個介面對象在release之後,給它所分配等記憶體就已經被釋放了,如果釋放之後系統再用到這個對象,那麼程式就會crash。

如果釋放之後把它的指標置為空白,則即便後面的程式用到該對象,也不會崩潰。

3.擷取目前時間和格式化

NSString *postTime;    NSDateFormatter *formatter = [[NSDateFormatteralloc] init];    [formatter setDateFormat:@"YYYYMMddhhmmss"];    postTime = [formatter stringFromDate:[NSDatedate]];

4.巧妙的運用宏,高效的預先處理

5.關於版本控制工具Versions:Versions上FileMerger找不到路徑的報錯問題。

 應用會提醒建議重裝,說沒有安裝這個工具,但是在Xcode下我們又是能發現該應用已經裝了的。
最後網上查了下說是Xcode版本升級問題,導致應用路徑該了,當時versions預設對filemerge路徑沒改。
剛剛把 Xcode 升級到 4.3.2 發現 Versions 的檔案對比功能無法使用了。因為 Xcode 自從 4.3 之後整體打包成一個App放到了 /Applications 下面,過去的 /Developer 整個被建議刪除掉了。
Versions 按照原來的路徑沒辦法找到 FileMerge.app 所以搞罷工。處理起來很簡單,去命令列執行
sudo /usr/bin/xcode-select -switch /Applications/Xcode.app/Contents/Developer

6.項目編譯時間一種常見格式報錯

Undefined symbols for architecture i386:
  "_OBJC_CLASS_$_ASIHTTPRequest", referenced from:
      objc-class-ref in ASIInputStream.o
      _OBJC_CLASS_$_ASIFormDataRequest in ASIFormDataRequest.o
      objc-class-ref in ASIFormDataRequest.o
      objc-class-ref in ASINetworkQueue.o
      objc-class-ref in ASIDownloadCache.o
      objc-class-ref in NLNetHelper.o
  "_OBJC_METACLASS_$_ASIHTTPRequest", referenced from:
      _OBJC_METACLASS_$_ASIFormDataRequest in ASIFormDataRequest.o
  "_NetworkRequestErrorDomain", referenced from:
      -[ASIFormDataRequest addFile:withFileName:andContentType:forKey:] in 
這是我們在引入第三方類庫檔案時,build後錯誤。比如引入_ASIHTTPRequest和SBJson時。
如果出現以上錯誤了,比較簡單的方法就是。點擊項目,--》build Phase s--》compile sources中,點擊add後,我們能看到項目下的源檔案,此時,建議把你能看到尾碼為.m檔案全add了~~。
後來發現同事引入時沒沒什麼問題,經提醒發現一個一直被我忽略的問題,就是拖動檔案進來時,一般我們是選了非引入而是copy一份,這個沒問題,但是下面海域個選礦,addtarget。這個記得勾上,因為關係到項目的一些配置,我估計是就是這個原因。

7.ios用戶端於java服務端互動關於null的的問題

在ios網路操作時解析json時,有時會有這樣額一種情況: “myThing”:null;
而myThing根據情況分成:1,在有返回的時候是一個字典;2若無內容,返回null。
然後我們在用戶端處理是需要判斷是佛為null才能來做相應的解析(如果null依舊去解析這個自定則會報錯),但是僅僅的一句 if(dic)並不試用。
必須[Dic  isEqual: [NSNull null]]

這個其實是指標空於內容空的一種區別。一般來說我們在判斷指標空是用nil,而內容空則是NSNull

8.判斷字竄A中是否包含字竄B

暫時沒找到java中的包含函數
oc提供了一個rangeOfString。然後看length長度。

9.關於ViewController之間互動,資料的傳遞

在Android我們知道兩個Activity之間可以使用bundle來傳遞,iOS中其實提供了很多解決方案.

但是後來發現最簡單的一種就是,我們在第二個ViewController中申明一個這樣的屬性,

在第第一個ViewController中初始化第二個vc後,設定進去要傳遞的資料就可以了~

當然,用一個全域或是單例類存放在某些情況下會很合適。

10.NSNotificationCenter的妙用和小技巧

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(refeshLogin) name:@"login" object:nil];

訊息的註冊和監聽,以及發送通知調用post發送然後監聽處理。

我覺得善用這個類很美妙。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.