1. 程式人生 > >IOS開發的基礎知識

IOS開發的基礎知識

1.為什麼對一個變數release後還要設為nil

  對一個變數release後,這個變數指向的記憶體釋放了,但這個變數本身沒變,仍指向原來的記憶體地址。若這個變數在釋放後被訪問,或者被重複release,就會導致應用崩潰。設為nil後這個變數指向0×00,可以保證程式以後訪問不到原先的記憶體地址,對nil進行release也沒任何問題。

2.使用類成員時,前面加不加self.有什麼區別

  不加self.呼叫的是成員本身,加self.後實際上呼叫了其成員的get set方法。

  例:

  //.h

  @property (nonatomic, retain) NSString *name

  //.m

  name = @"bang" //沒有retain,隨時會被釋放

  NSString *str = self.name //等於NSString *str = [self name];

  self.name = @"bang" //等於[self setName:@"bang"]; 這時在set方法裡retain了這個字串

3.記憶體洩漏

  可以通過xcode的編譯工具Product-Analyze檢查函式塊範圍內可能的洩漏點(外帶會提示一些可能有的錯誤)。

  用leaks工具監測出來的洩漏查詢方法是跟蹤其程式碼提示中出現的變數,經常這個變數是在提示的呼叫堆疊以外的地方洩漏的。若實在查不到,最終辦法是重寫這個變數的retain和release方法,debug,從呼叫堆疊看是誰retain了它而沒有release。

  要注意的是,用CFXXCreate(例如CFArrayCreate)生成的變數要用CFRelease釋放。

4.資料儲存

  如無搜尋需要,可以將一個數據物件直接序列化後存到sqlite,取出時直接反序列化為物件使用。序列化需要資料類實現NSCoding協議,實現encodeWithCoder和initWithCoder兩個方法就行,若有多個數據物件,可以寫個基類實現這兩個方法,並在這裡面利用反射列舉自身所有變數去encode和decode,一勞永逸,具體實現網上找找就有了。

5.UINavigationController頭尾顯示隱藏

  在用NavigationController去管理view的push和pop時,需要根據不同的view設定是否顯示NavigationBar和ToolBar,一開始在錯誤的地方設定了,導致有時該顯示NavigationBar和ToolBar時不顯示的情況,後來發現在viewWillAppear上設定萬無一失。別笑我土鱉,沒好好去理解它整個流程,一直沒發現。

  - (void) viewWillAppear:(BOOL)animated{

  [super viewWillAppear:animated];

  [self.navigationController setToolbarHidden:NO];

  [self.navigationController setNavigationBarHidden:NO];

  }

6.UITableView遊標式渲染

  tableView的機制大概是:先定好總行數,某一行滾入檢視範圍時,回撥一個函式去取view出來顯示。這一行滾出檢視再滾入時仍會繼續回撥這一函式取view。有這樣的機制就是說無論你table裡的資料有多少,都可以全部放入table中不用分頁,因為不用一次性把所有資料都取出來,只在需要顯示的時候根據遊標去取對應的資料就行了。

  可能這是APP元件很自然的方式不用說明,但在web上頁面上的資料和元素都是要一次性載入記憶體的,做久了web,一開始沒想到它這樣的實現機制,導致我們走了不少彎路。

7.UIWebView渲染範圍

  UIWebView不是根據可視範圍決定每次的渲染範圍,而是根據自身控制元件的frame大小決定。

  曾嘗試webview嵌在tableview裡,為了讓webview跟tableview一起滾動,把webview的大小設為webview裡的內容大小,讓webview不出滾動條,從而能跟著tableview的滾動條一起滾。這樣做的後果是每次webview都一次性渲染整個頁面,記憶體佔用多效能很差,而且在放大縮小這個webview時,渲染放大的整個頁面更吃力,出現不能忍受的效能。解決辦法是讓webview定住高度為一整屏iphone的高度,限制了webview每次的渲染範圍為可視範圍,效能大好。帶來的問題是無法隨tableview滾動,但可以以其他方式優化體驗。最近看到新版的ZAKER也是這樣做的。

相關推薦

微信小程序開發基礎知識總結

nodes owa wim remove ide rdd custom value onload 微信小程序在無論在功能、文檔及相關支持方面,都是優於前面幾種微信賬號類型,它提供了很多原生程序才有的接口,使得我們的小程序在很多方面突破H5頁面應用的限制,更加接近原生程序的功

iOS開發基礎:OC數組對象NSArray的常用方法

indexof c語言 super main sset spa -- arr 初始 本文介紹了OC的數組對象的基本方法的使用: 因為OC的數組中存儲的為對象類型,所以我們可以新建一個Person類,通過Person生成對象進行操作。 其中Person.h中的代碼為: [o

響應式布局的開發基礎知識

是什麽 代碼 開發人員 通過 css3 相對 智能 nta 成了 本章主要分為以下幾個部分 正確理解響應式設計 響應式設計的步驟 響應式設計需要註意的問題 響應式網頁布局實現原理 第一:正確理解響應式布局 響應式網頁設計就是一個網站能夠兼容多個終端-而不是為每個終端做一

APP開發基礎知識

百度 ips undefine 蘋果官方文檔 java obj .net 屬於 引擎 本文針對小白用戶對App做一個簡單的介紹,首先要了解App都有哪些類型,不同的類型適用於哪些需求,用戶可以根據自己的需求選擇不同的App開發。 一 App有哪些形式 WebApp:簡單來說

java 測試開發基礎知識(類加載,JVM等)

常量表達式 對數 前端 .cn 都是 新的 ron 技術分享 區域 寫在開頭: 面試的時候別人很可能會問你的java原理,.class load 原理, jvm機制,這些都是Java的底層知識,特整理如下: 1. 首先,編寫一個java程序,大家會用ide編寫一個例

Python開發 基礎知識 3.類別&方法 (bool & str) (未完待續)

類別 可使用type()檢視 內建 [ 布林:bool (Boolen)  字串:str (String)  數字:int (Integer)  小數:float 列表:list  元祖:tuple  字典:dict ] 亦可用class宣告新類別   布林值  (用於比較、邏輯

Python開發 基礎知識 2.變量 ( *arg, **kwargs )

python開發 nbsp brush 若有 return pri bsp true justin 變量 *args 和 **kwargs ( *和**為本體,名稱為通俗的名稱約定 ) *args 用於函式定義。 可將不定數量的參數傳遞給一個函數,傳入函式的引數,會先以

python 爬蟲開發基礎知識

Request請求方式 常用的有get post請求的url 第一部分是協議(或稱為服務方式)第二部分是存有該資源的主機IP地址(有時也包括埠號)第三部分是主機資源的具體地址,如目錄和檔名等請求頭 包含請求時的頭部資訊,如User-Agent,Host,Cookies等資訊請求體 請求時攜帶的資料,如提

fiddler二次開發基礎知識

一、官方開發文件 連線在這:http://www.telerik.com/fiddler 開發文件在這:http://docs.telerik.com/fiddler/Extend-Fiddler/ExtendWithDotNet 二、Fiddler介面 Fiddler4 公開介面有以下

區塊鏈開發基礎知識學習

隨著區塊鏈的火熱相信很多同學已經躍躍欲試想投入到區塊鏈開發隊伍當中來,可是又感覺無從下手,本文就基於以太坊平臺,輕鬆帶大家入區塊鏈技術開發應用的大門。      以太坊是什麼   我們要開發一個區塊鏈應用,如果要從頭開發一個區塊鏈是不現實的,這時我們就需要以太坊這樣的平臺。 以太坊(Ethe

Revit二次開發基礎知識

獲取應用、文件及當前檢視資訊 public Result Execute(ExternalCommandData commandData, ref string message, ElementSet elements) {

Linux驅動開發基礎知識

常用命令 lsmod: list module,將模組列表顯示),功能是打印出當前核心中已經安裝的模組列表 insmod: install module,安裝模組,功能是向當前核心中去安裝一個模組,用法是insmod xxx.ko modinfo: module information,模組資

軟考架構師(6)——系統開發基礎知識

一:軟體生命週期 軟體生存週期,分為8個階段: 1、可行性研究與計劃 2、需求分析 3、概要設計 4、詳細設計 5、實現 6、整合測試 7、確認測試 8、使用和維護  二:軟體開發模型 1:瀑布模型   開發如同瀑布,從一個階段流向下一個階段。其思想認為軟體開發是一個階段化的精確過程,每一個步驟都

IM開發基礎知識補課(二):如何設計大量圖片檔案的服務端儲存架構?

1、前言 一個完善的IM系統中通常充斥著大量的圖片內容,包括:使用者頭像、圖片訊息、相簿、圖片表情等等,那麼在做服務端架構設計時該如何儲存這些圖片呢?本文分享的是典型Web應用中大量圖片的服務端儲存加構的演進過程,但基本的技術原理和架構思路對於IM系統而言同樣適用,所以在閱

IM開發基礎知識補課(三):快速理解服務端資料庫讀寫分離原理及實踐建議

1、前言 IM應用從服務端資料的角度來看,它是一種很特殊的應用場景,拋開基礎資料、增值業務和附屬功能不談,單從IM聊天工具的立身之本——聊天資料來說,理論上是不需要在服務端儲存的(或者說只需要短暫儲存——比如離線訊息,上線即拉走),這也是為什麼微信在前段時間號稱絕不儲存使用

IM開發基礎知識補課(四):正確理解HTTP短連線中的Cookie、Session和Token

1、前言 眾所周之,IM是個典型的快速資料流交換系統,當今主流IM系統(尤其移動端IM)的資料流交換方式都是Http短連線+TCP或UDP長連線來實現。Http短連線主要用於從伺服器讀取各種持久化資訊:比如使用者資訊、聊天曆史記錄、好友列表等等,長連線則是用於實時的聊天訊息

遊戲開發基礎知識2

前面介紹瞭如何進行模組化以及Lib庫的製作,關於庫的製作,後面會再次深入講解的,不過可能會在鋒酷開發社群上做一個專題來講解的,到時候希望大家關注下。 前面我們已經說過了,再多人合作開發過程中,模組化顯得非常重要。在模組化開發過程中呢,比較重要的就是函式指標了,大家都知道C++的一個很重要的特徵就是多型,函式指

iOS開發基礎Swift(04)— 迴圈

迴圈的介紹在開發中經常會需要迴圈常見的迴圈有:for/while/do while.這裡我們只介紹for/while,因為for/while最常見for迴圈的寫法最常規寫法// 傳統寫法 for var

Swift: iOS底層基礎知識-檔案目錄結構

一:iOS沙盒知識 出於安全考慮,iOS系統把每個應用以及資料都放到一個沙盒(sandbox)裡面,應用只能訪問自己沙盒目錄裡面的檔案、網路資源等(也有例外,比如系統通訊錄、照相機、照片等能在使用者授權的情況下被第三方應用訪問) 1:MyApp.app 

安卓(Android)開發基礎知識

.aar檔案 .aar是一種壓縮檔案,和.jar類似,不過它可以包含資原始檔,例如圖片、drawable、xml資源 .jar檔案 在軟體領域,JAR檔案(Java歸檔,英語:Java ARchive)是一種軟體包檔案格式,通常用於聚合大量的Java類檔案、相關的元資料和資源(文字、圖片等)檔案到一個檔案,以