iOS學(xué)習(xí)筆記

  1. autoLayout

Autolayout的作用非常明確:幫我們確定在不同設(shè)備永乌、不同(父view)環(huán)境下是趴,同一個(gè)可視單元所應(yīng)具有合適的位置和尺寸允跑,因此坛增,當(dāng)一個(gè)UIView上所施加的約束能夠唯一確定它的frame(x, y, width, height)的時(shí)候我們的自動(dòng)布局的使用才是正確的建椰。而新手通常犯的兩類錯(cuò)誤就是約束不足(約束太少)和約束沖突兩種(約束太多)雕欺。如果你給出的約束只能夠確定這個(gè)view的大小,或者位置或者位置中的某一個(gè)項(xiàng)(比如x)的時(shí)候棉姐,就會(huì)出現(xiàn)約束不足的情況屠列,在xib或者storyboard中,會(huì)以黃色的警告出現(xiàn)在左側(cè)提示框內(nèi)伞矩;如果你給出的約束推導(dǎo)出了兩個(gè)甚至多個(gè)互相矛盾的位置尺寸結(jié)果的時(shí)候笛洛,就產(chǎn)生了布局錯(cuò)誤,在編譯的時(shí)候直接就build不過乃坤。

  1. 在畫布中角度是順時(shí)針轉(zhuǎn)的


    angle
  2. 引用

在繪制的方法中苛让,使用 UIGraphicsBeginImageContextWithOptions 來取代 UIGraphicsGetCurrentContext 出處

  1. 應(yīng)用間相互調(diào)用只要知道雙方設(shè)置好的URL就行了,打開另一個(gè)應(yīng)用時(shí)可以把當(dāng)前應(yīng)用的URL傳過去湿诊,要打開的應(yīng)用就可以根據(jù)響應(yīng)的代碼就可以讓用戶觸發(fā)返回原始應(yīng)用了

  2. 事件的響應(yīng)鏈?zhǔn)菑淖右晥D到父視圖層層傳遞的狱杰,模式是子視圖調(diào)用父視圖相同的方法([super XXX]),所以觸發(fā)該事件的先后順序應(yīng)該是從父視圖到子視圖厅须,當(dāng)然這是默認(rèn)情況仿畸,如果你重寫了事件方法,就可以控制是否把事件傳遞給父視圖朗和,或者哪個(gè)視圖先觸發(fā)事件
    上面的理解貌似不夠準(zhǔn)確错沽,重新整理如下:
    . 事件鏈的建立 簡(jiǎn)單講是發(fā)生在addSubView時(shí),被添加的視圖的nextResponder(下一個(gè)響應(yīng)者)就是它的父視圖例隆。如果一個(gè)veiw(下面簡(jiǎn)稱A)不是普通的view,它是某個(gè)viewcontroller的根veiw,那么A的nextResponder在A從初始化完后就賦值為viewController抢蚀。然后當(dāng)A被addsubview到rootview的時(shí)候(addChildViewController時(shí)會(huì)發(fā)生)镀层,Controller A的nextresponder被復(fù)制為rootview。
    . 事件的傳遞 當(dāng)用戶觸摸時(shí),UIKit先創(chuàng)建一個(gè)事件對(duì)象唱逢,加到事件隊(duì)列中去吴侦,然后UIAPPlication從中取出來,從window開始查找坞古,發(fā)現(xiàn)點(diǎn)擊位置在window的范圍內(nèi)备韧,那就繼續(xù)查找window的subViews,直到找到視圖樹最頂部的葉子視圖,然后把事件交給這個(gè)頂部視圖痪枫,視圖處理事件织堂,如果不處理就交給它的nextResponser,層層往下,直到window再到UIApplacation奶陈。

  3. 像素就是一個(gè)小點(diǎn)易阳,px就表示一個(gè)真正的點(diǎn),pt就是標(biāo)準(zhǔn)中定好的有大小的點(diǎn),1/72英寸,分辨率是指指每單位面積(平方英寸)像素的個(gè)個(gè)數(shù)吃粒,即dpi,之所以談到具體的設(shè)備時(shí)經(jīng)常用W*H表示分辨率潦俺,是用了當(dāng)前設(shè)備的長(zhǎng)寬方向上的像素除以當(dāng)前設(shè)備相應(yīng)的尺寸

  4. devices只有選擇了universal(通用)才可以讓iPhone和iPad共用界面或者說不同尺寸的設(shè)備共用界面

  5. IQKeyboardManager 必須是在push或者present的VC的視圖上才可以自動(dòng)調(diào)整位置 事后問過作者,說怎么都可以徐勃,但是我用的版本卻實(shí)不行事示,作者給意見,可以考慮addChildViewCOntroller

  6. 從UINavigationController里出來的UIViewController無法不會(huì)執(zhí)行shouldAutorotate,這種情況必須自定義一個(gè)繼承UINavigationController的類

  7. 要實(shí)現(xiàn)UITableViewCell的編輯必須實(shí)現(xiàn)下面兩個(gè)方法
    (BOOL)tableView:(UITableView *)tableView canEditRowAtIndexPath:(NSIndexPath *)indexPath;
    (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath;

  8. 關(guān)于堆棧的理解 :棧 — 戰(zhàn)死 棧是死的僻肖,一般是提前分配好的肖爵,除非你malloc出來,堆的可控性就比較強(qiáng)檐涝,也就是自己控制它的創(chuàng)建遏匆,當(dāng)然它的消亡也應(yīng)該你來控制
    舉個(gè)小栗:在一個(gè)函數(shù)中定義了 NSArray *a = [[NSArray alloc] init] a是個(gè)指針,他就是放在棧中的谁榜,但是它指向的那個(gè)數(shù)組就是存在堆中的幅聘。

  9. objective-c因?yàn)樽址容^特殊,所以在寫正則的時(shí)候窃植,碰到轉(zhuǎn)義字符必須多加一個(gè)”\\”帝蒿,比如:全數(shù)字字符:@"^\\\\d\\+$"

  10. UITableView竟然被我發(fā)現(xiàn)了一個(gè)新用法(當(dāng)然這個(gè)用法是舊的),它在編輯狀態(tài)下可以左邊顯示圓圈巷怜,didSelected會(huì)自動(dòng)選中葛超,再按一次didDeselect會(huì)自動(dòng)消失

  11. 下面這句話的意思是獲取aView在window中的位置,注意最前邊是aView的父視圖
    [aView.superview convertPoint:aView.frame.origin toView:nil];

  12. UIView不能同事加多個(gè)由make生成的transform,如果加多個(gè)延塑,第二個(gè)應(yīng)該用原始方法绣张,如下
    self.contentViewContainer.transform = CGAffineTransformMakeTranslation(point.x, 0);
    self.contentViewContainer.transform = CGAffineTransformScale(self.contentViewContainer.transform,scale, scale);

  13. extern 是表明這個(gè)這個(gè)變量是全局的,在其他類里也可以使用這個(gè)變量不必把首次聲明這個(gè)變量的類引入就行关带,但是必須得再次聲明侥涵,static是僅限于此類里使用,其他類要想使用必須引入該類

  14. 圖片的坐標(biāo)原點(diǎn)在左下角

  15. 關(guān)于刷新子視圖

-layoutSubviews方法:這個(gè)方法,默認(rèn)沒有做任何事情芜飘,需要子類進(jìn)行重寫
-setNeedsLayout方法: 標(biāo)記為需要重新布局务豺,異步調(diào)用layoutIfNeeded刷新布局,不立即刷新嗦明,但layoutSubviews一定會(huì)被調(diào)用
-layoutIfNeeded方法:如果笼沥,有需要刷新的標(biāo)記,立即調(diào)用layoutSubviews進(jìn)行布局(如果沒有標(biāo)記娶牌,不會(huì)調(diào)用layoutSubviews)
如果要立即刷新奔浅,要先調(diào)用[view setNeedsLayout],把標(biāo)記設(shè)為需要布局裙戏,然后馬上調(diào)用[view layoutIfNeeded]乘凸,實(shí)現(xiàn)布局

  1. 我勒個(gè)去哎,self.navigationController.toolbarHidden = NO 這樣可以在View下邊有顯示一個(gè)toolbar哎累榜,這個(gè)是可以利用的喲营勤,完成任務(wù)必須抽時(shí)間好好研究一番,新發(fā)現(xiàn)啊

  2. 下面的代碼輸出什么
    @implementation Son : Father
    - (id)init{
    self = [super init]; if (self) {
    NSLog(@"%@", NSStringFromClass([self class]));
    NSLog(@"%@", NSStringFromClass([super class]));
    }
    return self;
    }
    @end

答案:都輸出”Son”解釋:objc中super是編譯器標(biāo)示符壹罚,并不像self一樣是一個(gè)對(duì)象葛作,遇到向super發(fā)的方法時(shí)會(huì)轉(zhuǎn)譯成objc_msgSendSuper(...),而參數(shù)中的對(duì)象還是self猖凛,于是從父類開始沿繼承鏈尋找- class這個(gè)方法赂蠢,最后在NSObject中找到(若override)此時(shí),[self class]和[super class]已經(jīng)等價(jià)了辨泳。

所以虱岂,子類調(diào)用父類的某個(gè)方法,父類的這個(gè)方法又調(diào)用了一個(gè)跟子類有相同名字的某個(gè)方法菠红,相當(dāng)于子類直接調(diào)用了這個(gè)方法

  1. UITextField是有l(wèi)eftView和rightView的第岖,可以利用leftView在添加了背景圖片后添加左邊留白,但是得注意要設(shè)置屬性
    leftViewMode = UITextFieldViewModeAlways

  2. load方法會(huì)在類實(shí)例話的時(shí)候調(diào)用试溯,如果要用runtime黑魔法的話就可以在這里用蔑滓。initializer方法會(huì)在第一次調(diào)用該類的方法時(shí)調(diào)用這個(gè)方法,屬于懶加載

  3. UITableView的header是searchBar的時(shí)候拖拽時(shí)searchBar背景會(huì)被拉伸

  4. 視圖控制器切換方法
    - (void)transitionFromViewController:(UIViewController *)fromViewController toViewController:(UIViewController *)toViewController duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^)(BOOL finished))completion NS_AVAILABLE_IOS(5_0);
    不用你再去給容器視圖添加(addSubView)和刪除(removeFromSuperView)子視圖遇绞,它會(huì)幫你處理好

  5. 哈哈哈键袱,XCode好傻喲,如果你在.m文件里提前有了 setX和x方法摹闽,然后才在.h文件里用@property聲明x屬性蹄咖,.m里就不允許你使用_x這個(gè)變量。此時(shí)付鹿,@synthesize 就派上了用場(chǎng)澜汤。@dynamic@synthesize的區(qū)別在于:使用@synthesize編譯器會(huì)確實(shí)的產(chǎn)生getter和setter方法铝量,而@dynamic僅僅是告訴編譯器這兩個(gè)方法在運(yùn)行期會(huì)有的,無需產(chǎn)生警告银亲。

假設(shè)有這么個(gè)場(chǎng)景,B類纽匙,C類分別繼承A類务蝠,A類實(shí)現(xiàn)某個(gè)協(xié)議(@protocol),協(xié)議中某個(gè)屬性( somePropety )我不想在A中實(shí)現(xiàn)烛缔,而在B類馏段,C類中分別實(shí)現(xiàn)。如果A中不寫任何代碼践瓷,編譯器就會(huì)給出警告:
“use @synthesize, @dynamic or provide a method implementation"
這時(shí)你給用@dynamic somePropety; 編譯器就不會(huì)警告院喜,同時(shí)也不會(huì)產(chǎn)生任何默認(rèn)代碼。

  1. UITableView在編輯狀態(tài)下如果指定編輯樣式是添加和刪除晕翠,可以在視圖上顯示復(fù)選框喷舀,利用這個(gè)特性可以方便實(shí)現(xiàn)多選。
    - (UITableViewCellEditingStyle)tableView:(UITableView *)tableView editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
    {
    return UITableViewCellEditingStyleDelete | UITableViewCellEditingStyleInsert;
    }
    注意:以上是在UITableView單選的情況下淋肾,如果是多選就會(huì)自動(dòng)出現(xiàn)復(fù)選框硫麻,不會(huì)執(zhí)行上段代碼。??說了好多廢話喲

  2. UITableView在調(diào)用了reloadData之后樊卓,tableView會(huì)在調(diào)用完cell的高度獲知contentSize之后就調(diào)用reloadData之后的語(yǔ)句了拿愧,完了之后才去加載cell

  3. 在 MRC 下,使用 __block 說明符也可以避免循環(huán)引用碌尔。因?yàn)楫?dāng) block 從椊焦迹拷貝到堆時(shí),__block 對(duì)象類型的變量不會(huì)被 retain唾戚,沒有 __block 說明符的對(duì)象類型的變量則會(huì)被 retian柳洋。正是由于 __block 在 ARC 和 MRC 下的巨大差異,我們?cè)趯懘a時(shí)一定要區(qū)分清楚到底是 ARC 還是 MRC颈走。

  4. 實(shí)現(xiàn)下面的方法膳灶,我們就可以對(duì)一個(gè)類進(jìn)行使用想NSArray和NSDictionary那樣的語(yǔ)法糖用下標(biāo)或者key來存取數(shù)據(jù)了, so cool

    - (id)objectAtIndexedSubscript:(NSUInteger)idx;
    - (void)setObject:(id)objatIndexedSubscript:(NSUInteger)idx;
    - (void)setObject:(id)objforKeyedSubscript:(id <NSCopying>)key;
    - (id)objectForKeyedSubscript:(id)key;
    
  5. CALayer的border是出現(xiàn)在layer內(nèi)部的,比如說layerWidth為10,那么border就會(huì)占據(jù)layer的content的四周寬度為10的空間立由。

  6. 系統(tǒng)視頻的上傳必須拷貝到沙盒目錄中才能上傳轧钓。??

  7. 手?jǐn)]NSLayoutConstraint需要注意firstItem和secondItem的順序

  8. 注意了,注意了锐膜,keyWindow不知道什么時(shí)候會(huì)被系統(tǒng)干掉毕箍,所以把hud加在keyWindow上的時(shí)候一定要注意哦。最近遇到的在把mov轉(zhuǎn)換成mp4的時(shí)候系統(tǒng)起了個(gè)異步線程道盏,然后kenWindow就被干掉了而柑。

  9. 用CGContextClearRect就可以實(shí)現(xiàn)畫一張中間透明的圖片了文捶。

  10. 想知道某個(gè)變量在程序調(diào)試時(shí)的狀態(tài),可以用借助dispatch_source_t 監(jiān)控調(diào)試開始媒咳,打印變量 from

    dispatch_queue_t queue = dispatch_get_main_queue();
    static dispatch_source_t source = nil;
    __typeof(self) __weak weakSelf = self;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        source = dispatch_source_create(DISPATCH_SOURCE_TYPE_SIGNAL, SIGSTOP, 0, queue);
        if (source)
        {
            dispatch_source_set_event_handler(source, ^{
                NSLog(@"Hi, I am: %@", weakSelf);
            });
            dispatch_resume(source); // 10
        }
    });
    
  11. 當(dāng)UINavigationController push或者pop操作時(shí)NavigationBar右側(cè)底部會(huì)變灰粹排,解決這種問題需要把最接近當(dāng)前vc的view的view的背景色修改一下就可以了。

Paste_Image.png
  1. 企業(yè)賬戶 往App Store上發(fā)布應(yīng)用必須是Agent賬戶
  2. 用Xcode寫C涩澡,即使僅僅有C也要把Compile Sources As改為Objective C++
  3. 我一直以為下邊的代碼是默認(rèn)的顽耳,然而并不是,需要明確寫出來妙同。??
    self.tableView.rowHeight = UITableViewAutomaticDimension;
  4. CALayer對(duì)path的動(dòng)畫執(zhí)行完后path為初始值,如果想要最后停留住狀態(tài)就可以把初始值設(shè)為toValue的值
  5. iOS11的本地通知要想在前臺(tái)顯示必須實(shí)現(xiàn)代理willPresent的方法,文檔有說明的,記住
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末射富,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子粥帚,更是在濱河造成了極大的恐慌胰耗,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,542評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芒涡,死亡現(xiàn)場(chǎng)離奇詭異柴灯,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)费尽,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,596評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門弛槐,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人依啰,你說我怎么就攤上這事乎串。” “怎么了速警?”我有些...
    開封第一講書人閱讀 158,021評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵叹誉,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我闷旧,道長(zhǎng)长豁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,682評(píng)論 1 284
  • 正文 為了忘掉前任忙灼,我火速辦了婚禮匠襟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘该园。我一直安慰自己酸舍,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,792評(píng)論 6 386
  • 文/花漫 我一把揭開白布里初。 她就那樣靜靜地躺著啃勉,像睡著了一般。 火紅的嫁衣襯著肌膚如雪双妨。 梳的紋絲不亂的頭發(fā)上淮阐,一...
    開封第一講書人閱讀 49,985評(píng)論 1 291
  • 那天叮阅,我揣著相機(jī)與錄音,去河邊找鬼泣特。 笑死浩姥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的状您。 我是一名探鬼主播及刻,決...
    沈念sama閱讀 39,107評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼竞阐!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起暑劝,我...
    開封第一講書人閱讀 37,845評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤骆莹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后担猛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體幕垦,經(jīng)...
    沈念sama閱讀 44,299評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,612評(píng)論 2 327
  • 正文 我和宋清朗相戀三年傅联,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了先改。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,747評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蒸走,死狀恐怖仇奶,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情比驻,我是刑警寧澤该溯,帶...
    沈念sama閱讀 34,441評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站别惦,受9級(jí)特大地震影響狈茉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜掸掸,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,072評(píng)論 3 317
  • 文/蒙蒙 一氯庆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧扰付,春花似錦堤撵、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,828評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至禽翼,卻和暖如春屠橄,著一層夾襖步出監(jiān)牢的瞬間族跛,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,069評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工锐墙, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留礁哄,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,545評(píng)論 2 362
  • 正文 我出身青樓溪北,卻偏偏與公主長(zhǎng)得像桐绒,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子之拨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,658評(píng)論 2 350

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