iOS框架使用筆記

CoreAnimation示例

? ? CABasicAnimation* folat = [CABasicAnimation animationWithKeyPath:@"opacity"];

??? folat.fillMode = kCAFillModeBackwards;

??? folat.duration = 0.5;

??? folat.beginTime = CACurrentMediaTime()+1.1;

??? folat.fromValue = @(0);

??? folat.toValue = @(1);

??? [v1.layer addAnimation:folat forKey:nil];


-(void)animateLocate:(UIImageView*)view{

??? float speed = 10.0/self.view.bounds.size.width;

??? float dur = (self.view.bounds.size.width-view.frame.origin.x)*speed;

??? [UIView animateWithDuration:dur delay:0.1 options:UIViewAnimationOptionCurveEaseOut animations:^{

??????? CGRect rc = view.frame;

??????? rc.origin.x = self.view.bounds.size.width;

??????? view.frame = rc;

??? } completion:^(BOOL fin){

??????? CGRect rc = view.frame;

??????? rc.origin.x = 0;

??????? view.frame = rc;

??????? [self animateLocate:view];

??? }];

}

Masonry的使用

我希望兩個等寬高的紅色方塊能夠在屏幕旋轉(zhuǎn)的時候,間距等比例縮放半哟,它們的相對位置是固定的,絕對位置隨著屏幕的寬改變而改變

//代碼中View的順序與圖中從左到右的View的順序一致

//例子中,唯一不確定的就是灰色View的寬度,我們先把確定的約束給一個一個的添加上來

//灰1左間距画株、高度冕房、垂直位置(因為和紅1底部對齊)是確定的,添加約束

[gray1 mas_makeConstraints:^(MASConstraintMaker *make{????????

make.height.mas_equalTo(20);????????make.leading.equalTo(self.view.mas_leading).offset(0);????????

make.bottom.equalTo(red1.mas_bottom);????}];

//紅1婶博,寬高、左間距荧飞、底間距是確定的凡人,添加約束?

[red1 mas_makeConstraints:^(MASConstraintMaker *make) {????????

make.width.mas_equalTo(100);????????make.height.mas_equalTo(50);????????make.left.equalTo(gray1.mas_right);????????

make.bottom.equalTo(self.view.mas_bottom).offset(-50);????}];

//灰2,左間距叹阔、高度挠轴、垂直位置是確定的,寬度要與灰1一致耳幢,是為了能均勻填充岸晦,添加約束?

[gray2 mas_makeConstraints:^(MASConstraintMaker *make) {????????

make.height.and.width.equalTo(gray1);????????make.leading.equalTo(red1.mas_right);????????

make.bottom.equalTo(red1.mas_bottom);????}];

//紅2,寬高、左間距启上、底間距是確定的邢隧,添加約束?

[red2 mas_makeConstraints:^(MASConstraintMaker *make) {????????

make.height.and.width.equalTo(red1);????????make.leading.equalTo(gray2.mas_right);????????

make.bottom.equalTo(red1.mas_bottom);????}];

//灰3,左間距冈在、右間距府框、高度、垂直位置是確定的讥邻,添加約束?

[gray3 mas_makeConstraints:^(MASConstraintMaker *make) {????????

make.height.and.width.equalTo(gray1);????????make.leading.equalTo(red2.mas_right);????????

make.trailing.equalTo(self.view.mas_right);????????make.bottom.equalTo(red1.mas_bottom);???? }];

其中 迫靖,make.left.equalTo(redView.mas_right).offset(20).priority(250);

priority設(shè)置優(yōu)先級,默認(rèn)是1000兴使,此場景用于中間的控件可能被隱藏或移除的情況

Runloop Mode

NSDefaultRunLoopMode

UITrackingRunLoopModes

NSRunLoopCommonModes

performSelector關(guān)于內(nèi)存管理的執(zhí)行原理是這樣的執(zhí)行 [self performSelector:@selector(method1:) withObject:self.tableLayer afterDelay:3]; 的時候系宜,系統(tǒng)會將tableLayer的引用計數(shù)加1,執(zhí)行完這個方法時发魄,還會將tableLayer的引用計數(shù)減1盹牧,由于延遲這時tableLayer的引用計數(shù)沒有減少到0,也就導(dǎo)致了切換場景dealloc方法沒有被調(diào)用励幼,出現(xiàn)了內(nèi)存泄露汰寓。

利用如下函數(shù):[NSObject cancelPreviousPerformRequestsWithTarget:self]

A repeating timer reschedules itself based on the scheduled firing time, not the actual firing time. For example, if a timer is scheduled to fire at a particular time and every 5 seconds after that, the scheduled firing time will always fall on the original 5 second time intervals, even if the actual firing time gets delayed. If the firing time is delayed so far that it passes one or more of the scheduled firing times, the timer is fired only once for that time period; the timer is then rescheduled, after firing, for the next scheduled firing time in the future.

注意:NSTimer使用最好加到主線程runloop中去,并且使用NSRunLoopCommonModes

關(guān)于library 苹粟,framework & CocoaPod

You may be wondering, “What’s the difference between a library, a framework and a CocoaPod?” And trust me, it’s okay if you find the whole thing a touch confusing!

A CocoaPod, or “pod” for short, is a general term for either a library or framework that’s added to your project by using the CocoaPods tool.

iOS 8 introduced dynamic frameworks, and these allow code, images and other assets to be bundled together. Prior to iOS 8, CocoaPods were created as static libraries, which are just “fat” binaries. This means they contain several code instruction sets (e.g. i386 for the simulator, armv7 for devices, etc.), but they aren’t allowed to contain any resources such as images or assets.

Another important difference is dynamic frameworks have namespace classes and static libraries don’t. So, if you had two classes called MyTestClass in different static libraries within a single project, Xcode would not be able to build the project because it would fail to link correctly citing duplicate symbols. However, Xcode is perfectly happy building a project that has two classes with the same name in different frameworks.

Why does this matter? Unlike Objective-C, the standard Swift runtime libraries aren’t included in iOS! This means your framework must include the necessary Swift runtime libraries. As a consequence, pods written in Swift must be created as dynamic frameworks. If Apple allowed Swift static libraries, it would cause duplicate symbols across different libraries that use the same standard runtime dependencies.

Alcatraz

在xcode8+安裝如下:

sudo gem install update_xcode_plugins

update_xcode_plugins??先備份xcode 然后

update_xcode_plugins --unsign??得到unsigned xcode

安裝Alcatraz后有滑,推薦使用插件

FuzzyAutoComplete 編碼提示

VVDocumenter-Xcode 快速注釋

KSImageNamed imagenamed 快捷找到圖片資源

instruments使用time profiler注意事項

1.當(dāng)點(diǎn)擊Time Profiler應(yīng)用程序開始運(yùn)行后.就能獲取到整個應(yīng)用程序運(yùn)行消耗時間分布和百分比.為了保證數(shù)據(jù)分析在統(tǒng)一使用場景真實(shí)行有如下點(diǎn)需要注意:

在開始進(jìn)行應(yīng)用程序性能分析的時候,一定要使用真機(jī),模擬器運(yùn)行在Mac上,然而Mac上的CPU往往比iOS設(shè)備要快嵌削。相反毛好,Mac上的GPU和iOS設(shè)備的完全不一樣,模擬器不得已要在軟件層面(CPU)模擬設(shè)備的GPU苛秕,這意味著GPU相關(guān)的操作在模擬器上運(yùn)行的更慢肌访,尤其是使用CAEAGLLayer來寫一些OpenGL的代碼時候. 這就導(dǎo)致模擬器性能數(shù)據(jù)和用戶真機(jī)使用性能數(shù)據(jù)相去甚遠(yuǎn).

2.另外在開始性能分析前另外一件重要的事情是,應(yīng)用程序運(yùn)行一定要發(fā)布配置 而不是調(diào)試配置.

在發(fā)布環(huán)境打包的時候艇劫,編譯器會引入一系列提高性能的優(yōu)化吼驶,例如去掉調(diào)試符號或者移除并重新組織代碼.另iOS引入一種"Watch Dog"[看門狗]機(jī)制.不同的場景下,“看門狗”會監(jiān)測應(yīng)用的性能店煞。如果超出了該場景所規(guī)定的運(yùn)行時間蟹演,“看門狗”就會強(qiáng)制終結(jié)這個應(yīng)用的進(jìn)程.開發(fā)者可以crashlog看到對應(yīng)的日志.但Xcode在調(diào)試配置下會禁用"Watch Dog"

幾種配置可選項:

Separate by Thread(建議選擇):通過線程分類來查看那些線程占用CPU最多。

Invert Call Tree(不建議選擇):調(diào)用樹倒返過來浅缸,將習(xí)慣性的從根向下一級一級的顯示轨帜,如選上就會反過來從最底層調(diào)用向一級一級的顯示魄咕。如果想要查看那個方法調(diào)用為最深時使用會更方便些衩椒。

Hide Missing Symbols(建議選擇):隱藏丟失的符號,比如應(yīng)用或者系統(tǒng)的dSYM文件找不到的話,在詳情面板上是看不到方法名的毛萌,只能看一些讀不懂的十六進(jìn)值苟弛,所以對我們來說是沒有意義的,去掉了會使閱讀更清楚些阁将。

Hide System Libraries(建議選擇):選上它只會展示與應(yīng)用有關(guān)的符號信息膏秫,一般情況下我們只關(guān)心自己寫的代碼所需的耗時,而不關(guān)心系統(tǒng)庫的CPU耗時做盅。

Flatten Recursion(一般不選):選上它會將調(diào)用棧里遞歸函數(shù)作為一個入口缤削。

Top Functions(可選):選上它會將最耗時的函數(shù)降序排列,而這種耗時是累加的吹榴,比如A調(diào)用了B亭敢,那么A的耗時數(shù)是會包含B的耗時數(shù)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末图筹,一起剝皮案震驚了整個濱河市帅刀,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌远剩,老刑警劉巖扣溺,帶你破解...
    沈念sama閱讀 218,640評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異瓜晤,居然都是意外死亡锥余,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評論 3 395
  • 文/潘曉璐 我一進(jìn)店門痢掠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哈恰,“玉大人,你說我怎么就攤上這事志群∽疟粒” “怎么了?”我有些...
    開封第一講書人閱讀 165,011評論 0 355
  • 文/不壞的土叔 我叫張陵锌云,是天一觀的道長荠医。 經(jīng)常有香客問我,道長桑涎,這世上最難降的妖魔是什么彬向? 我笑而不...
    開封第一講書人閱讀 58,755評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮攻冷,結(jié)果婚禮上娃胆,老公的妹妹穿的比我還像新娘。我一直安慰自己等曼,他們只是感情好里烦,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評論 6 392
  • 文/花漫 我一把揭開白布凿蒜。 她就那樣靜靜地躺著,像睡著了一般胁黑。 火紅的嫁衣襯著肌膚如雪废封。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評論 1 305
  • 那天丧蘸,我揣著相機(jī)與錄音漂洋,去河邊找鬼。 笑死力喷,一個胖子當(dāng)著我的面吹牛刽漂,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播弟孟,決...
    沈念sama閱讀 40,352評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼爽冕,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了披蕉?” 一聲冷哼從身側(cè)響起颈畸,我...
    開封第一講書人閱讀 39,257評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎没讲,沒想到半個月后眯娱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡爬凑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評論 3 336
  • 正文 我和宋清朗相戀三年徙缴,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘁信。...
    茶點(diǎn)故事閱讀 40,021評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡于样,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出潘靖,到底是詐尸還是另有隱情穿剖,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評論 5 346
  • 正文 年R本政府宣布卦溢,位于F島的核電站糊余,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏单寂。R本人自食惡果不足惜贬芥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望宣决。 院中可真熱鬧蘸劈,春花似錦、人聲如沸尊沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至壹甥,卻和暖如春救巷,著一層夾襖步出監(jiān)牢的瞬間壶熏,已是汗流浹背句柠。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留棒假,地道東北人溯职。 一個月前我還...
    沈念sama閱讀 48,224評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像帽哑,于是被迫代替她去往敵國和親谜酒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評論 2 355

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

  • (一)Masonry介紹 Masonry是一個輕量級的布局框架 擁有自己的描述語法 采用更優(yōu)雅的鏈?zhǔn)秸Z法封裝自動布...
    木易林1閱讀 2,338評論 0 3
  • Masonry是一個輕量級的布局框架妻枕,擁有自己的描述語法僻族,采用更優(yōu)雅的鏈?zhǔn)秸Z法封裝自動布局,簡潔明了并具有高可讀性...
    3dcc6cf93bb5閱讀 1,768評論 0 1
  • 一屡谐、前言 關(guān)于蘋果的布局一直是我比較糾結(jié)的問題述么,是寫代碼來控制布局,還是使用storyboard來控制布局呢愕掏?以前...
    iplaycodex閱讀 2,451評論 0 1
  • [置頂]iOS - Masonry使用中的一些整理 標(biāo)簽:iOS資源大全iOS常用方法iOS學(xué)習(xí)資料Masonry...
    DreamMakerSky閱讀 3,169評論 0 4
  • 五一了,當(dāng)然要出去玩耍滑潘,大吃垢乙,大笑,那才是我們對嗎语卤? 那在遠(yuǎn)方的你在干嘛侨赡? 拖著疲憊的身體,回到宿舍粱侣,躺在床上看奇...
    兔紙被用了閱讀 429評論 0 1