国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

IOS開發的基礎知識

2019-11-14 20:43:41
字體:
來源:轉載
供稿:網友

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也是這樣做的。

 

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 略阳县| 柳河县| 皋兰县| 盘锦市| 栾城县| 资中县| 大新县| 湛江市| 南靖县| 广南县| 湘阴县| 清涧县| 唐海县| 措勤县| 华亭县| 行唐县| 兴安盟| 哈巴河县| 福泉市| 桑植县| 瑞丽市| 海安县| 大英县| 莱芜市| 穆棱市| 绥棱县| 乌拉特中旗| 库尔勒市| 搜索| 丹棱县| 泗水县| 上犹县| 河北区| 厦门市| 三河市| 大港区| 河北区| 阿瓦提县| 屏南县| 凯里市| 探索|