2018-04-27

1、weak的底層實現(xiàn)

Runtime維護了一個weak表耙厚,用于存儲指向某個對象的所有weak指針俺夕。
weak表其實是一個hash(哈希)表批什,
Key是所指對象的地址难捌,Value是weak指針的地址(這個地址的值是所指對象的地址)數(shù)組囚聚。

weak 的實現(xiàn)原理可以概括一下三步:
1贺拣、初始化時:
  runtime會調(diào)用objc_initWeak函數(shù)蓖谢,初始化一個新的weak指針指向?qū)ο蟮牡刂贰?2、添加引用時:
  objc_initWeak函數(shù)會調(diào)用 objc_storeWeak() 函數(shù)譬涡,
  objc_storeWeak() 的作用是更新指針指向闪幽,創(chuàng)建對應(yīng)的弱引用表。
3涡匀、釋放時:
  調(diào)用clearDeallocating函數(shù)盯腌。
  clearDeallocating函數(shù)首先根據(jù)對象地址獲取所有weak指針地址的數(shù)組,
  然后遍歷這個數(shù)組把其中的數(shù)據(jù)設(shè)為nil渊跋,
  最后把這個entry從weak表中刪除腊嗡,最后清理對象的記錄。

http://www.cocoachina.com/ios/20170328/18962.html

2拾酝、autoreleasepool

Tagged Pointer
偽對象燕少,小于10位數(shù)的數(shù)字,值直接存放在指針中蒿囤,解決64位系統(tǒng)客们,內(nèi)存占用問題
類函數(shù)方法返回對象為unretained return value,生命周期被延長材诽,不一定會使用 autorelease

http://www.cocoachina.com/ios/20170303/18829.html

3底挫、dispatch_onec synchronized nonatomic atomic

synchronized 遞歸互斥鎖
dispatch_onec 原子性 信號量完成線程同步 參數(shù)要是靜態(tài)全局參數(shù)
atomic 自旋鎖 循環(huán)等待直到解鎖 自旋鎖效率高于互斥鎖

http://www.reibang.com/p/ef3f77c8b320

4、copy mutableCopy

嗯.png
不可變對象 
    copy 淺拷貝 內(nèi)存地址不變 結(jié)果對象不可變 只改變指針地址
    mutableCopy 深拷貝 內(nèi)存地址變化 結(jié)果為可變
可變對象 
    copy mutableCopy 都為深拷貝 內(nèi)存地址變化
容器類對象脸侥,copy mutableCopy 內(nèi)部對象地址不變

copy修飾屬性時 不管聲明類型為什么 賦值后都變成不可變
自定義對象 實現(xiàn)copy 要重寫 copyWithZone
[[NSMutableArray alloc] initWithArray:arr1 copyItems:YES] 元素深拷貝

http://www.cocoachina.com/ios/20170601/19402.html

5建邓、hit-test 響應(yīng)鏈

1、擴大UIButton的響應(yīng)熱區(qū)
  重載UIButton的-(BOOL)pointInside: withEvent:方法睁枕,讓Point即使落在Button的Frame外圍也返回YES
2官边、子view超出了父view的bounds響應(yīng)事件
  重載父view的-(UIView *)hitTest: withEvent:方法,去掉點擊必須在父view內(nèi)的判斷外遇,
  然后子view就能成為 hit-test view注簿,用于響應(yīng)事件

http://www.reibang.com/p/d8512dff2b3e

6、多線程
http://www.360doc.com/content/15/0618/17/19663521_479024177.shtml
http://www.cocoachina.com/ios/20180313/22573.html

7跳仿、單項鏈表

1诡渴、判斷環(huán),找出節(jié)點
*********************************************************************
* 函數(shù)名稱:linklist *IsLoop(linklist *head)
* 函數(shù)功能:判斷鏈表是否含有環(huán)菲语,并找出環(huán)的入口
* 參    數(shù):head----鏈表的頭結(jié)點
* 返 回 值:若有環(huán)妄辩,則返回鏈表中環(huán)的入口結(jié)點惑灵;否則返回NULL
* 說    明:程序參考定理:碰撞點p到連接點的距離=頭指針到連接點的距離
*********************************************************************
extern linklist *IsLoop(linklist *head)
{
    linklist *p1=head, *p2=head;
    int IsLoopFlag=0;
    if (head==NULL)
    return NULL;
    while (p2->next!=NULL && p2->next->next!=NULL)
    {
        p1 = p1->next;
        p2 = p2->next->next;

       if (p1==p2)
        {
            IsLoopFlag = 1;
            break;
        }
    }
    if (!IsLoopFlag)
    return NULL;
    else
    {
    // p2指向頭結(jié)點,p1在第一次相遇點恩袱。
    // 之后利用定理泣棋,當(dāng)p1再次等于p2時,相遇點即為環(huán)的入口結(jié)點
    p2 = head;  
    while (p1!=p2)
    {
        p1 = p1->next;
        p2 = p2->next;
    }
    return p1;
    }
}

2畔塔、反轉(zhuǎn)
迭代:
linkList reverse(linkList head) {
    linkList p,q,pr;
    p = head->next;
    q = NULL;
    head->next = NULL;
    while(p) {
        pr = p->next;
        p->next = q;
        q = p;
        p = pr;
    }
    head->next = q;
    return head;
}

Node * Node_reverse_v2(Node* node) {
    if (node == NULL) return NULL;
    if (node->next == NULL) return node;

    Node *first = node; //總是指向新鏈表的首部潭辈。
    Node *now = node->next;
    Node *next = now->next;
    first->next = NULL; //首節(jié)點變成尾節(jié)點,尾節(jié)點的下一個節(jié)點置空澈吨,防止環(huán)路把敢。
    do {
        next = now->next;
        now->next = first;
        first = now;
        now = next;
    } while (next != NULL);
    return first;
}
遞歸:
Node * Node_reverse(Node *node) {
    if (node == NULL) return NULL;
    if (node->next == NULL) return node;
    Node * n = Node_reverse(node->next);
    if (n != NULL) {
        n->next = node;
        node->next = NULL;
    }
    return node;
}

8、Bounds Frame

frame 針對父視坐標(biāo)系圖計算
bounds 針對自身坐標(biāo)系谅辣,改變bounds的x修赞、y,影響子視圖位置
scrollView 滾動和邊距原理桑阶,都是改變bounds的柏副,x、y
改變bounds的大小蚣录,參照點是center割择,frame隨之改變

https://blog.csdn.net/chenyufeng1991/article/details/51764303

9、鎖 性能

1萎河、OSSpinLock 自旋鎖荔泳,最快,消耗大量 CPU 資源
    不絕對安全虐杯,線程高低優(yōu)先級玛歌,造成優(yōu)先級反轉(zhuǎn)
2、dispatch_semaphore pthread_mutex 性能好
3擎椰、synchronized 慢

http://www.cocoachina.com/ios/20160707/16957.html
https://blog.ibireme.com/2016/01/16/spinlock_is_unsafe_in_ios/

10支子、setValue和setObject的區(qū)別

1、 setObject:forkey:中value是不能夠為nil的达舒,不然會報錯值朋。
     setValue:forKey:中value能夠為nil,但是當(dāng)value為nil的時候休弃,會自動調(diào)用removeObject:forKey方法
2吞歼、setValue:forKey:中key的參數(shù)只能夠是NSString類型圈膏,而setObject:forKey:的可以是任何類型

https://blog.csdn.net/itianyi/article/details/8661997

11塔猾、NSArray NSMutableArray 線程安全

NSMutableArray本身是線程不安全的,NSArray安全
不使用atomic修飾屬性
1 稽坤、atomic 的內(nèi)存管理語義是原子性的丈甸,僅保證了屬性的setter和getter方法是原子性的糯俗,是線程安全的,但是屬性的其他方法睦擂,
  如數(shù)組添加/移除元素等并不是原子操作得湘,所以不能保證屬性是線程安全的。
2 顿仇、atomic雖然保證了getter淘正、setter方法線程安全,但是付出的代價很大臼闻,執(zhí)行效率要比nonatomic慢很多倍(有說法是慢10-20倍)
3鸿吆、使用nonatomic修飾NSMutableArray對象就可以了,而使用鎖述呐、dispatch_queue來保證NSMutableArray對象的線程安全
  實現(xiàn):GCD用同步并行隊列讀操作惩淳,barrier(按照插入隊列順序,執(zhí)行完才執(zhí)行后邊)寫操作

https://blog.csdn.net/kangguang/article/details/79194563

12乓搬、算法 兩個升序數(shù)組找相同元素

- (NSArray *)sameFromTwoArray:(NSArray *)arr1 array2:(NSArray *)arr2 {
    NSMutableArray *resultArr = [NSMutableArray array];
    for (int i=0, j=0; i<arr1.count && j< arr2.count;) {
        if (arr1[i] == arr2[j]) {
            [resultArr addObject:arr1[i]];
            i++;
            j++
        } else if (arr1[i] > arr2[j]) {
            j++;
        } else {
            i++;
        }
    }
    return resultArr;
}

13思犁、二分查找

int binarySearch(int arr[], int len, int key)
  {
      int left = 0;
      int right = len - 1;
      int mid;
  
      while (left <= right) {
          mid = (left + right) / 2;
         if (key < arr[mid]) {//key在左邊
             right = mid - 1;
         } else if (arr[mid] < key) {//key在右邊
             left = mid + 1;
         } else {
             return mid;
         }
     }
     return -1;
 }

https://www.cnblogs.com/bofengyu/p/6761389.html

14、_ _block _ _weak

1.__block不管是ARC還是MRC模式下都可以使用进肯,可以修飾對象激蹲,還可以修飾基本數(shù)據(jù)類型。 
2.__weak只能在ARC模式下使用坷澡,也只能修飾對象(NSString)托呕,不能修飾基本數(shù)據(jù)類型(int)。 
3.__block對象可以在block中被重新賦值频敛,__weak不可以项郊。 
4.__block對象在ARC下可能會導(dǎo)致循環(huán)引用,非ARC下會避免循環(huán)引用斟赚,__weak只在ARC下使用着降,可以避免循環(huán)引用,
    __block避免循環(huán)引用需要在block內(nèi)部把__block修飾的obj置為nil
5.__weak 本身是可以避免循環(huán)引用的問題的拗军,但是其會導(dǎo)致外部對象釋放了之后任洞,
    block內(nèi)部也訪問不到這個對象的問題,可以通過在 block 內(nèi)部聲明一個__strong 的變量來指向 weakObj发侵,
    使外部對象既能在 block 內(nèi)部保持住交掏,又能避免循環(huán)引用的問題

https://www.cnblogs.com/xu-antong/p/6503344.html
https://www.cnblogs.com/yajunLi/p/6203222.html?utm_source=itdadao&utm_medium=referral

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刃鳄,隨后出現(xiàn)的幾起案子盅弛,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,273評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挪鹏,死亡現(xiàn)場離奇詭異见秽,居然都是意外死亡,警方通過查閱死者的電腦和手機讨盒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評論 3 398
  • 文/潘曉璐 我一進店門解取,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人返顺,你說我怎么就攤上這事禀苦。” “怎么了遂鹊?”我有些...
    開封第一講書人閱讀 167,709評論 0 360
  • 文/不壞的土叔 我叫張陵伦忠,是天一觀的道長。 經(jīng)常有香客問我稿辙,道長昆码,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,520評論 1 296
  • 正文 為了忘掉前任邻储,我火速辦了婚禮赋咽,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘吨娜。我一直安慰自己脓匿,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,515評論 6 397
  • 文/花漫 我一把揭開白布宦赠。 她就那樣靜靜地躺著陪毡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪勾扭。 梳的紋絲不亂的頭發(fā)上毡琉,一...
    開封第一講書人閱讀 52,158評論 1 308
  • 那天,我揣著相機與錄音妙色,去河邊找鬼桅滋。 笑死,一個胖子當(dāng)著我的面吹牛身辨,可吹牛的內(nèi)容都是我干的丐谋。 我是一名探鬼主播,決...
    沈念sama閱讀 40,755評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼煌珊,長吁一口氣:“原來是場噩夢啊……” “哼号俐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起定庵,我...
    開封第一講書人閱讀 39,660評論 0 276
  • 序言:老撾萬榮一對情侶失蹤吏饿,失蹤者是張志新(化名)和其女友劉穎践美,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體找岖,經(jīng)...
    沈念sama閱讀 46,203評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,287評論 3 340
  • 正文 我和宋清朗相戀三年敛滋,在試婚紗的時候發(fā)現(xiàn)自己被綠了许布。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,427評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡绎晃,死狀恐怖蜜唾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情庶艾,我是刑警寧澤袁余,帶...
    沈念sama閱讀 36,122評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站咱揍,受9級特大地震影響颖榜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜煤裙,卻給世界環(huán)境...
    茶點故事閱讀 41,801評論 3 333
  • 文/蒙蒙 一掩完、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧硼砰,春花似錦且蓬、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至豹障,卻和暖如春冯事,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背血公。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工桅咆, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人坞笙。 一個月前我還...
    沈念sama閱讀 48,808評論 3 376
  • 正文 我出身青樓岩饼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親薛夜。 傳聞我的和親對象是個殘疾皇子籍茧,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,440評論 2 359

推薦閱讀更多精彩內(nèi)容

  • ZFQ_dacf 2018-04-27· 字?jǐn)?shù) 459· 閱讀 57· 日記本 姓名:周富強 公司:廈門大科機械有...
    ZFQ_dacf閱讀 105評論 0 0
  • 六項精進打卡 姓名:謝魯斌 寧波市百雷仕電動工具有限公司 【日精進打卡第7天】 努力組 【知~學(xué)習(xí)】 《六項精進》...
    謝魯斌閱讀 146評論 0 0
  • 今天開陽雖然下雨,但是我一點都沒有感覺到冷梯澜。每天清晨醒來就先按排好自己的全天計劃寞冯,做起事情來就不會慌亂。 每個人到...
    祝紹英閱讀 214評論 0 0
  • emma_804f閱讀 591評論 2 2
  • 這是一個快節(jié)奏的時代俭茧,科技的日新月異,社會的飛速發(fā)展漓帚,工作母债,生活,容不得我們一絲一毫的怠慢尝抖。似乎只有加班加...
    彥彥歸來兮閱讀 1,095評論 3 0