總結 總結

 

總結 總結 總結html

 

 

命名規範課題前端

NSString 爲何用copy修飾java

Nsstring比較特殊 繼承nsobject oc將他歸到oc對象。mysql

Oc對象都是動態分配內存 存放到堆區ios

例如 @「dancer」 只是把數據區的字符串 進行了一個類型轉換,oc把他當成字符串對象處理,例如@「dancer」並非存在堆區,並非動態分配出來的c++

咱們沒法判斷這類字符串何時釋放,若是釋放,指針指向他毫無心義程序員

?????web

 

***** objective-c 動態性objective-c

編譯時/運行時sql

編譯時 詞法/語法檢查,將代碼 編譯成計算機執行語言 裝到內存中跑起來

運行時 

 

動態類型:

譬如id類型修飾的對象 爲動態類型對象 編譯時並不知道是什麼類型 運行時纔會檢查肯定出對象的類型

iOS 自省方法 

is Kindleofclass 檢查運行時對象類型

is Memberofclass

 

動態綁定 

 

基於動態類型  當運行時對象的類型被肯定  類的原有的屬性 方法被肯定,也包括運行時添加的方法 屬性,這就是所謂的動態綁定了

核心就是運行時 動態添加屬性,方法

 

動態加載

1 動態資源加載 例如1x 2x 3x 圖片 ,程序會根據機型動態加載 不一樣分辨率的圖片

2 可執行代碼的動態加載,譬如懶加載

譬如懶加載數組

-(NSArray *)countArray

{

If(!_countArray){

_countArray = [[NSArray alloc]  init];

}

 

Return  _countArray;

}

[self.countArray  addObject:@「」];

 

***** 關於kvo: 

1 監聽機制,基於NSObject 兩個方法willChangeValueForKey 和didChangeValueForKey,實現的。

2 當給一個屬性添加觀察者時候,運行時,會建立一個繼承對象所屬類的派生類(子類),而且重寫被觀察屬性的set方法,默認一個對象的isa指針會以前所屬類,而這是isa會指向這個新的派生類,因此其實被觀察的屬性的賦值操做是在這個派生類 裏實現的。

3 的當被監聽的屬性發生改變前,調用willChange方法 記錄舊的值,改變結束 調用DidChangeValue新的值,出發kvo監聽方法。

 

Ps 對象isa指針默認所屬類 class類裏面也有個isa指針 指向元類 元類裏包含調用的 1 方法列表 2類的版本信息 3成員變量數組ivars等

*****kvo應用場景

1 推送消息 消息時 放數組裏面 咱們的birgeValue顯示紅點提示 須要兼監聽數組改變 給提示

2 視頻 監聽進度條

3 作輪播圖監聽 scrollview 監聽contentOffSet 

 

 

 

***** 深拷貝 淺拷貝

1 最大的區別就是 有否建立新對象。深拷貝內容拷貝,淺拷貝指針拷貝(內存地址拷貝)

2 深拷貝,修改一個對象不影響另外一個對象。

3 淺拷貝,修改一個對象影響另一個對象

 

簡單說:

深拷貝:指針指向一塊新建立的內存

淺拷貝:指針指向一塊已經存在的內存

 

大致上 copy mutable copy 策略是深拷貝

retain  strong是淺拷貝

 

A0E92ED1-AA8F-422D-A070-072CCAFD7F2E.png

 

***** Super /self 總結

1F05A479-F581-4D07-8690-5BF88ADE6D6A.png

***** SDWebImage細節

1 sd_setImageWithURL

2 SDWebImageManager  單例 downloadImageWithURL

 內部  SDImageCache類(nscache)以以url爲key queryDiskCacheForKey方法 Memory Cache 以url爲key去內存中查詢緩存圖片,若是沒有  Disk Cache:去磁盤上找。

若是磁盤找到,會將圖片設置到memory cache中。

3 若是緩存數據查詢成功,則返回,不成功則請求網絡self.imageDownloader down…

4 若是下載成功 [self.imageCache storeImage]儲存 completedBlock回調前端展現

 

ps 磁盤緩存清除策略

1 清理過時緩存

2 清理寫入時間早的圖片

@interface SDImageCache : NSObject

 

@property (assign, nonatomic) NSInteger maxCacheAge;//最大緩存時間

@property (assign, nonatomic) NSUInteger maxCacheSize;//最大緩存空間

//設置最大緩存空間

[SDImageCache sharedImageCache].maxCacheSize = 1024 * 1024 * 50;    // 50M

 

SDWebImage Bug

磁盤圖片渲染以前,須要獲得圖片的原始像素數據,而後去作繪製操做,因此圖片須要解壓縮。

 

***** 公司刷新 流程

size :取多少

offset:從哪裏取

count:總數

 

刷新:

設定size 20條 10條,offset 爲0 加到數組中

 

加載:

設定size20條 10條,第一次 獲取數據數組長度 offset 從這取值 取size條,加到數組。

判斷更多 has 數據數組個數< count總數

設置footer view 給個提示 沒有更多

 

 

***** SVPullrefresh 原理

 

建立個scrollView的分類  分類添加屬性,刷新頭部顯示的view 高度60 ,添加頭部刷新view爲scrollview的觀察者,監聽contentOffSet的改變,刷新頭部view 有幾種狀態,加載狀態,初始狀態,中止狀態,拖拽狀態,在觀察者監聽方法裏面,根據幾種狀態切換執行layoutSubview的顯示

 

*****bug

Bug復現:當下拉刷新 拽的不是太多時候,他會先調上拉加載,在下拉刷新。

緣由:1 svpull的頭部/尾部試圖都是scrollview的觀察者,監聽contentOffSet,2 當拖拽時候結束,scrollview代理結束 兩個都調用,設置刷新狀態,操做ui。

方案:加判斷,scrollviewdidScroll 拖拽結束,判斷當前偏移量 若是y>0  作上拉加載時候,設置加載狀態 loding狀態

 

9848E84A-B88B-42C4-9FF3-73B557371571.png

uiscrollview的分類

 

/**********************************************************************************/

 

*****tableview 滑動 cell 崩潰 (會議人氣榜)

且僅僅4s崩潰,其餘的不崩潰 並且會有內存明顯的飆升 正常100左右飆升到800

斷點調試 崩潰在sdwebimage裏面 沙盒取出的圖片轉碼 轉位圖時候,正常咱們設置圖片imageview setimage 都是在主線程中設置的 這其就包括解壓圖片爲位圖(很耗cpu) 而後calyer在view上作渲染。sdwebimage作法是開子線程去去作這個位圖的解壓縮,而後緩存 供ui使用,去沙盒中去圖片的時候不作任何處理,直接取,此次奔潰的緣由就是後臺返回的圖片太大 3000*5000,方案有兩個第一大圖片不處理 不解碼這樣性能差點 但不崩潰

第二種是 沙盒取出的圖片 先等比壓縮下。

 

個人方案是綜合下 沙盒取出圖片先判斷若是款大於屏幕寬度 等比壓縮下,小的不壓縮,而後再去轉碼

 

******* 線程同步

防止資源搶奪,讓線程同步進行,能夠加互斥鎖/NSLock,

@synchronized(obj):針對對象 ,保證在多條線程同時操做obj時候,一條線程執行完,在執行另外一個

NSLock:針對方法,給一條線程中操做對象的方法加鎖,保證一條線程執行完,在執行另外一個

場景:三方庫

 

 

******* 多線程場景應用

qq分享要求的圖片1m之內,後臺傳的圖片1.2m發佈出去 回調不掉。

方案:下載圖片nsdata datawithurl 網速慢直接卡死 要開線程 圖片存儲沙盒,等比壓縮圖片

 

 

******* 信號量 GCD實現 設置線程併發數 / 設置線程順序

 

信號量:資源計數器

 

信號量介紹:

資源計數器,對於信號量有兩個操做達到互斥 v(發送信號)/p(信號等待)

當一個操做執行A 執行p操做,信號量爲-1未零,系統規定信號量爲0,等待,操做A執行完畢,執行v操做,信號量+1,釋放資源,線程B才能夠執行.經過信號量來達到互斥操做.

 

方法介紹:

1 建立信號量 指定資源數量

2兩個重要參數 發送信號(V),等待信號(P)

 

part 1 設置線程順序 (經過一個執行,其餘阻塞的方式實現順序)

 

1 設置信號量爲1,開啓一條線程操做時候信號量-1,當前程序信號量爲0,則其餘線程操做阻塞狀態,噹噹前線程執行結束,信號量+1,則其餘線程操做 恢復執行.

 

2 經過開啓一條線程,來阻塞其餘線程,來實現多線程執行順序.

 

part 2  設置線程最大併發數 

 

一樣設置信號量 爲3,來實現最大線程併發數爲3的功能

1 信號量爲三,意味着能夠開啓三條線程操做.

2 一樣經過開啓一條線程 信號量-1 線程指向完畢 信號量+1,實現程序運行中,有三條線程能夠執行多線程操做,從而實現最大線程併發數.

 

 

******* xmpp 環境配置

 

材料:openfire服務器 mysql數據庫(默認裝到控制面板)

1 openfire mac版 基於java開發的 因此要求電腦有java運行環境 

沒有的話須要安裝jdk 查看java運行環境 終端執行命令 運行java -version 

 

2 mysql (服務端的數據庫)使用是須要有帳戶密碼默認裝到控制面板)

  1》安裝完 mysql 默認帳戶是root 密碼爲空

  2》終端命令配置命令行配置 開啓mysql 並設置密碼 

  3》建立的數據庫默認四個文件 有個test文件 

  4》管理工具navcat 還有個海豚(mysqlworkbeech)的 登陸輸入鏈接名稱(自定義)輸入IP地址 端口號默認3306

       帳戶名稱 root 密碼(你配置過得)配置的數據庫名稱爲你自定義的名稱

3 關聯openfire 和數據庫1 導入openfire數據表文件到mysel(建立字段包括用戶等)

 1》openfire創建數據庫文件openfire數據庫編碼選擇utf-8的

 2》默認open fire數據庫安裝到/user/local/openfire/ 數據庫腳本保存在/user/local/openfire/ /resources/database/中

 

 

 

支持不少種數據庫 保存mysql的數據庫到桌面 導入到mysql中,這樣mysql就添加好數據庫字段了

 

4 關聯openfire 和數據庫1  後臺管理設置關聯數據庫mysql

 

 

 

屏幕快照 2017-03-06 下午11.19.21.png

 

 

後臺配置 選中驅動類型:mysql 指定mysql路徑 輸入mysql   用戶名密碼:root 密碼:123456

配置openfire 後臺帳戶密碼 admin 123456

 

設置jid:

屏幕快照 2017-03-06 下午11.31.03.png

***** const / #define 宏定義

 

   const   c/c++ 定義常量的關鍵字

   #define  預編譯指令

>>相同點

      都能定義常量

 

>>不一樣點

1 從內存分配角度, 

const    編譯器不會爲他分配內存空間,而是存儲在符號表中,,做爲一個常量存在,在編譯時不會有存儲/讀取內存的操做

#define 編譯時候,,每次賦值操做,先進行宏替換,而後都開啓新的內存

因此 在運行時 const只被拷貝一份,而 #define 能夠有若干個拷貝  const效率會高於#define

Pasted Graphic.tiff

2 從使用角度

      #define 能夠定義函數,能夠定義單例,而const不能夠

備註: 蘋果推薦使用const 由於const是在編譯階段,會編譯檢查報錯;而宏定義,在預編譯階段 僅僅是替換 編譯階段 不檢查類型

7F8D5312-5C01-4E54-97D9-024E2667988A.png

From   http://www.cocoachina.com/ios/20160519/16342.html

***** static / extern  全局變量 局部變量牛逼閃閃 

 

static:修飾變量(全局,局部)使用 / 全局變量/static變量 存儲在靜態區 程序運行 只初始化一次

兩個做用 

Part1 :局部變量copy 進靜態區,延長局部變量聲明週期,程序運行期間 一直存在

Part2: 防止全局變量外部引用,外部引用extern

 

》》修飾局部變量:

做用:延長局部變量生命週期 (相似給局部變量變爲全局變量的意思!)

ps:局部變量自己存儲堆棧區,方法結束局部變量隨之銷燬;static修飾後將局部變量copy到靜態區,修飾後變量在運行中在靜態區給局部變量分配一次內存空間,且僅僅執行一次,程序運行期間變量一直存在不會銷燬。

ps:打點斷 ,發現下次執行這裏斷點過到下面去了。

995E3A13-6E44-4A03-BAB5-C9F39A06D01F.png

》》修飾全局變量:

主要是做用域的問題,static修飾後僅在本類中可使用,沒法extain引用,全局變量則能夠外部引用。

場景:int作自增運算

 

extern:外部引用  UIKIT EXTERN(牛逼閃閃的宏定義 吼吼~~)

一個類中聲明(即便寫在方法裏面也無妨),另外一個類extern 能夠直接引用。

079EED68-C52A-4859-BD7D-2EF9787769EE.png

 

D542B26E-1019-49DA-83BB-E9FAF521B8A2.png

備註:1 其餘類聲明NSString  *abcdefg  = @「紅咔嚓雷「,

2 當兩個類同時聲明NSString  *abcdefg 則編譯報錯,兩個文件同事O文件報錯 解決:

A187D275-75C4-4DA9-B8B1-D6461728B607.png

 

 

ps:無需等到程序會否執行到該方法,程序啓動即分配內存空間,因此無需加載到該方法。

ps:我的理解,相似經過extern關鍵字從靜態區 引出一個全局變量的意思,而後從新聲明,使用。。。

全局變量:變量存儲在靜態區,程序運行時分配一次內存空間,而後不會再去執行了。

 

 

 

局部變量:存放在棧空間中,方法執行結束,變量銷燬。

????爲何 類方法 要用static 修飾全局變量

 

***** 堆棧

棧 編譯器管理內存  棧的容量是系統預先設定好的 超了就會overflow ,分爲動態分配/靜態分配,局部變量 靜態分配;靜態/動態分配 都是由編譯器管理內存的

堆:程序員手動管理內存  堆都是動態分配內存的

***** @autoreleasepool

 @autoreleasepool :做用避免內存峯值

 數據比較

 加上 @autoreleasepool 內存恆定在27

 不加上 @autoreleasepool  內存27起 勻速飆升 結束53

 Ps:在自動釋放池中 調用autorelease方法纔會被放到自動釋放池,方法結束,纔會對對象發送releas方法

 結論:當出現大的for循環 且循環體內api爲 @autorelease時候建議加autoreleasepoor

 且:autoreleasepool 不能優化全部的循環

 

 ******************* ******************* ******************* ******************* ******************* *******************

 引伸:@autoreleasepool應用場景

 

 1> 大數字for循環時候,調用autorelease API方法時候,加入@autoreleasepool{}避免內存峯值

 例如:拼接字符串操做,stringWithFormat API建立字符串,臨時變量被大量建立,持續開闢內存,內存持續飆升....for循環結束,對象纔會銷燬,此時加入@autoreleasepool 會有幫助

 若是字符串是alloc 出來的,非autorelease API 則 @autoreleasepool  是無效的

 

***** 項目性能優化

 

1 懶加載  場景:初始化UI控件 2NSDateFormatter(日期格式化)

 

2 tableview優化 實現: 高度,數據 提早緩存,tableview只作賦值運算 減小subVies數量,rowHeight sectionHooterHeight 直接設定,少用代理

3 常識注意

 

***** NSURLCache

緩存原理 NSURLQequest 對應一個NSURLURLCacheResponse

緩存NSURLCache *cache = [NSURLCache shareURLCache];//掌握全局緩存

 

***** Block常識 

 

***** Block常識 (一)

方法經常使用聲明:@property (copy) void(^MyBlock)(void); 若是超出當前做用域以後仍然繼續使用block,那麼最好使用copy關鍵字,拷貝到堆區,防止棧區變量銷燬

定義block 

 typedef NSString  (^WebBaseHandlerBlock) (NSDictionary *retInfo, NSError *error);

屬性block

@property (nonatomic ,copy)abcBlock myblock;

@property (nonatomic ,copy)void (^youBlock)(NSString *);

 

_weak typeof(self) weakSelf = self;

所以,__block和__weak修飾符的區別實際上是挺明顯的: 

1.__block不論是ARC仍是MRC模式下均可以使用,能夠修飾對象,還能夠修飾基本數據類型。 

2.__weak只能在ARC模式下使用,也只能修飾對象(NSString),不能修飾基本數據類型(int)。 

3.__block對象能夠在block中被從新賦值,__weak不能夠。 

PS:__unsafe_unretained修飾符能夠被視爲iOS SDK 4.3之前版本的__weak的替代品,不過不會被自動置空爲nil。因此儘量不要使用這個修飾符。

 

***** Block和copy (二)

爲何要用copy:出於做用域考慮,默認block 存放在棧中,函數調用,棧分配內存,函數結束釋放內存,block 銷燬。再次調用block 時候報錯野指針錯誤。當前block 變量指向的被釋放的內存地址。因此須要copy到堆中,包住block的命。

「他自己的做於域是屬於建立時候的做用域,一旦在建立時候的做用域外面調用block將致使程序崩潰。」

 

***** Block  copy/strong (三)

使用retain也能夠,可是block的retain行爲默認是用copy的行爲實現的,

由於block變量默認是聲明爲棧變量的,爲了可以在block的聲明域外使用,因此要把block拷貝(copy)到堆,因此說爲了block屬性聲明和實際的操做一致,最好聲明爲copy。

 

***** Block  copy/strong 擴展

block幾種類型NSGlobalBlock NSStackBlock

block內部不引入外部變量:__ NSGlobalBlock

block內部引入外部變量   :__ NSStackBlock

 

***** weak 實現原理

 

runtime維護這個一個weak表(哈希表),記錄已對象的地址爲key,value爲 全部指向該對象的weak弱指針地址的數組,當對象銷燬時候經過weak表中該對象地址的value,查找到存有全部弱指針的地址的數組,賦值爲nil,而後從weak表中刪除。

對象銷燬 會調用objec_clear_deallocating函數

 

PS:怎麼找 對象地址 對應全部指向給對象的weak指針數組

1C8E2790-4CB4-4D81-B42D-5834BB43CAC1.png

 

block 使用

 

===場景1

譬如 協議中封裝一個 push控制器的操做

調用方:

 [****  **block^(id obj ,NSInteger type){

if(type ==1){

 [self.navagation pushViewController:obj  animation:YES];

}

}];=

+(void)**. ** :(**block)block

{

 

Uiviewcontroller *obj = [[UIViewController alloc] init];

if(block){

block(obj,1);

}

}

===場景2

譬如 封裝一個 請求url block操做

調用方 

[webbasehander  geturl:@「」 dict:dic  block^(id result ,NSError error)

操做result

[self.table reloadData];

 

];

  • (Void)getUrl:(nssting *)url  dict:(nsdictionary *)dict block:(**block)block

{

配置url

配置請求參數

[self request:url:block];

}

  • (void)equest:(nesting *)url block:(**block)block

{

ASI 請求

Request completionBlock{

 block(dic,error);

}};

}

 

總結 :當 封裝方面 設置好數據 觸發調用方的block,調用方獲取到值 ,操做後續部分

assign weak 區別

assign:修飾對象,和基本數據類型;當被修飾的變量指向變量釋放或置空,會出現野指針錯誤!

weak:只能修飾對象,不會出現野指針錯誤,當被修飾的變量指向的變量釋放或是置空,被修飾變量指向nil,不會出現野指針錯誤。

引伸

6B1A7280-138A-4C00-8BE6-E2083303707C.png

5B49E380-02E0-4E03-AEF5-ACDC6620401C.png

 

***** 內存分析

 

靜態內存分析 analyze、分析/ 藍色

例如:邏輯錯誤

 

logic error  /  Dead store/Memory

 

不是太準 不可變賦值給可變數組 ,調方法時候傳入的字典參數未實例化

動態內存分析 profile -allocation /leaks   側面/分配/泄漏

 

***** IOS  繪圖

Ios圖像繪製三種API

1 UIKIT

  UIBezierPath  (畫線,橢圓 角度 照相機) UIImage 顯示圖像

2 CoreGraphics/ Quartz 2D (c語言函數API)

Quartz 2D 是2d繪製呈現引擎

  CoreGraphics  CGContent CGPath  CGLayer CGBitmap

3 Open GL

支持2d/3d

 

CoreAnimation 算動畫引擎

 

 

*****手勢 響應者鏈條

 

分兩塊,

1 定位接收者

2 響應者鏈條

 

1定位接收者 當點擊屏幕的ui觸發一個事件,流程是事件添加到UIAplication的事件組,傳遞事件經歷 window ,父控件且判斷控件是否接受事件,若是是,則父控件遍歷子控件,判斷當前出發點是否在子控件上,繼續遍歷直到找到觸發該點的最後一個子控件,事件傳遞不能夠斷,覺得這全部控件務必能夠處理事件,獲取執行觸發事件的控件。 

ps:這就說明了 爲何交互期間中間有個什麼uiimageview等不能交互的父控件,致使子控件不接受響應事件

能夠接受響應事件的控件須要繼承UIResponder 但還不夠 須要能夠交互 不是隱藏的 alpha值不是過小

Pasted Graphic_1.tiff

2 響應者鏈條,功能是一個事件的發生,能夠被多個控件獲取。回傳靠的是super執行方法

舉例子:view上事件觸發 默認事件互傳給父控件,繼續回傳父控件,控制器.view 控制器(同樣繼承uiresponder);若是控制器還有父控制器那就父控件傳遞 給控制器 而後self.view 而後父控制器 window uiapplication 

 

 

*****runloop 

五中模式

1 UITrackingRunLoopMode

2 NSDefaultRunLoopMode

3 內核

4 開始

5NSRunLoopCommonModes = UITrackingRunLoopMode + NSDefaultRunLoopMode

獲取兩種方式 mainRunLoop currentRunloop

 

nstimer 會用到

平時api  [NSTimer schedulerTimerWithTimeInterval:1.0 targer:self selected:@selected(timerMethod)userInfo:nil repeats:YES]; // NSDefaultRunLoopMode 默認用的這個 因此處理滑動ui時候 timer 掛起 不執行了

repeats:YES

因此仍是 須要實例化

NSTimer *timer = [NSTimer timerWithTimeInterval:1.0 @selected(timerMethod)userInfo:nil repeats:YES ];

NSRunLoop *runLoop = [NSRunLoop currentRunLoop];

[runLoop addTimer:runLoop withMode:NSRunLoopCommonModes];

 

 

*****CALayer 詳解  CALayer /UIView

CALayer  : 負責繪圖 屬於quartzCore框架,是一套跨平臺繪圖框架(Mac osx,ios)因此 layer.backgroundColor是CGColorRef,(由於Mac osx 沒有UIKit,osx不是觸摸交互的)

UIView    : 繼承UIResponder 能夠作交互,屬於UIKit框架 負責構建用戶界面和管理內容.

關     系    : 簡單的說就是 UIView內部封裝了一個CALayer的對象,calayer對象負責繪圖部分,UIView負責交互和管理內容.

 

當對UiView進行繪製操做屬性時候,例如frame center backgroundColor,實際會調用對應layer的相關方法 

例如調用 view setframe 實際會調用layer的 positon bounse anchorPoint

 

備註:

CALayer 屬性 position anchorPoint(錨點) bounse size transform等

UIView的frame其實是由center 和bounds來決定的

UIkit 構建界面,相應事件

錨點與中心點重合,默認0.5-0.5,

Layer內含隱士動

C24E8886-BDBE-46A3-B65F-6FC5B97B8C60.png

 

https://blog.csdn.net/u013282174/article/details/50215605

 

*****TCP UDP 協議——

TCP (傳輸控制協議): 

1 創建鏈接,造成數據通道

2 傳輸數據大小不受限制

3 三次握手,創建長鏈接,安全協議

4 必須創建鏈接,效率稍低

 

UDP(數據報協議): 

1 無需創建鏈接,將數據源及目的封裝成數據包

2 傳輸大小有限制 小魚64kb

3 無需創建鏈接,非安全協議

4 速度快

 

*****get post tcp udp  傳輸協議等 ???

 

 

 

*****註冊登陸 加密流程 對稱非對稱加密 ????—

 

*****你在公司負責什麼——

 

*****上傳app 推送  ——

 

*****數據庫 sqlite語句——

 

*****公司緩存策略 首頁等——

 

 

 

*****多線程應用  線程同步等 什麼線程池

 

*****runtime 應用場景 事例介紹  ——

場景1

控制器釋放打印( 添加屬性 關聯)

奇葩:logDealloc對象 管理打印信息

原理:

1 push每次新建控制器,initXib調用分類方法 建立一個logDealloc對象 用個屬性記錄當前類名

2 防止方法結束對象釋放,在分類中須要,用個全局變量保存該對象(屬性爲類名),由於是分類因此關聯建立屬性,

3 pop控制器(本類)銷燬,分類銷燬,logDealloc對象銷燬,調用對象logDealloc的dealloc方法 打印類名

 場景2 

  控ios默認字體Heiti SC   

82A45CBE-474D-4D27-BA68-E77DD4AF0F3D.png

*****web跳轉———

 

 

 

*****單例模式—

*****鏤空的遮罩

nsmarch port???

 

     0 思路:蒙版.layer.mask = layer對象

     1 建立蒙版

     2 繪製貝塞爾路徑 添加反轉圖形(疊加部分會鏤空)

     3 建立layer(CAShapeLayer子類).path = 貝塞爾路徑.path

     4 設置 蒙版.layer「.mask = layer對象

 

建立表

create table if not exist t_student (primary key autoincrement,id integer ,name text not null,age integer default 18,)

建立表 create table if not exist 表名(字段 類型 約束,字段類型 約束,…)

 

insert into t_student (id,name,age) values (001,「小明」,20);

 

刪除

delete from t_student where age>20 and name 「小明」;

 

update 

 

 

 

公司緩存機制

#define HUIYIONELEVELCACHES           [YYUtil CreatCacheschilderPath:@"HUIYIONELEVELCACHES"]//會議頁面研究報告1級分類緩存

 

/var/mobile/Containers/Data/Application/6AB6ABF0-29D8-415C-A71A-239D802FF9D0/Library/Caches/AppCaches/HUIYIONELEVELCACHES

 

 

 

心得體會

上線 要注意是否有 版本升級問題

 

播放url 視頻注意轉碼  防止地址中帶中文

 [urlString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding];

 

 

 

 

 

NSMachPort ???

 

遞歸鎖

 

runloop

內存管理

哈希表

二叉樹

 

自動釋放吃

 

 

推送

 

本地推送:

 

http://www.cnblogs.com/ly1973/p/8848459.html

 

遠程推送

 

http://www.cnblogs.com/ly1973/p/8848404.html

 

 

 

 

分享      

三方登陸  

推送 

 

Im即時通信

視頻開發

內存泄露

性能優化

緩存

  

音樂播放

數據統計

數據庫加密

打包上線

 

 

 

多線程

決定是否開闢線程 看同步/異步 不是看隊列

相關文章
相關標籤/搜索