2016年6月22日 星期三

iOS常見面試問題每日研究

本文原自 iOS 中级面试题
http://mrpeak.cn/ios/2016/01/07/push

Day 1. ARC, Automatic Reference Counting

Apple, Transitioning to ARC Release Notes
https://developer.apple.com/library/ios/releasenotes/ObjectiveC/RN-TransitioningToARC/Introduction/Introduction.html

Wiki, Automatic Reference Counting
https://en.wikipedia.org/wiki/Automatic_Reference_Counting

理解 Objective-C 的 ARC
http://www.oschina.net/translate/objc-automatic-reference-counting-in-xcode-explained

自動引用計數
https://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/chapter2/16_Automatic_Reference_Counting.html

Swifter, @AUTORELEASEPOOL
http://swifter.tips/autoreleasepool/

Day 2. assign vs weak, __block vs __weak

被无数人写过的assign,retain,strong,weak,unsafe_unretained,还有copy
http://www.jianshu.com/p/4a1d1921284b

__weak与__block区别
http://honglu.me/2015/01/06/weak%E4%B8%8Eblock%E5%8C%BA%E5%88%AB/

Day 3. Atomic

Properties Are Atomic by Default
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ProgrammingWithObjectiveC/EncapsulatingData/EncapsulatingData.html

iOS基礎之atomic與nonatomic,assign,copy與retain的定義和區別
http://fanli7.net/a/bianchengyuyan/C__/20130618/372617.html

Objective-C——atomic一定是线程安全的吗?
http://blog.csdn.net/chenyufeng1991/article/details/49687215

Day 4. Retain cycle

Swift 自動引用計數 類別實例之間的迴圈強參考
https://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/chapter2/16_Automatic_Reference_Counting.html#strong_reference_cycles_between_class_instances

iOS blocks - 三個會造成retain cycle的anti patterns
http://popcornylu.blogspot.tw/2012/02/3-anti-patterns-which-lead-memory-leaks.html

Day 5. Runtime

Objective-C Runtime Programming Guide
https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html

iOS runtime学习笔记
http://www.jianshu.com/p/970ae3bac1ef

理解 Objective-C Runtime
http://justinyan.me/post/1624

Day 6. +(void)load; +(void)initialize;

Objective C类方法load和initialize的区别
http://www.cnblogs.com/ider/archive/2012/09/29/objective_c_load_vs_initialize.html

Day 7. Method swizzling

Objective-C的hook方案(一): Method Swizzling
http://blog.csdn.net/yiyaaixuexi/article/details/9374411

Objective-C Runtime 运行时之四:Method Swizzling
http://southpeak.github.io/blog/2014/11/06/objective-c-runtime-yun-xing-shi-zhi-si-:method-swizzling/

Day 8. UIView與CALayer

详解 CALayer 和 UIView 的区别和联系
http://www.cocoachina.com/ios/20150828/13244.html

KKBOX iOS/Mac OS X 基本開發教材 CALayer
https://zonble.gitbooks.io/kkbox-ios-dev/content/core_animation/calayer.html

Day 9. UIImageView 圓角

iOS 高效添加圆角效果实战讲解
http://www.jianshu.com/p/f970872fdc22

Day 10. drawRect

iOS重绘机制drawRect
http://blog.csdn.net/nyh1006/article/details/38899251

内存恶鬼drawRect
http://bihongbo.com/2016/01/03/memoryGhostdrawRect/

Day 11. 研究Alamofire

GitHub Alamofire/Alamofire
https://github.com/Alamofire/Alamofire

对于AlamoFire几点思考,AlamoFire几点思考
http://www.zendei.com/article/4319.html

Alamofire 源码赏析(一)基础篇
http://liuduo.me/2015/11/17/Alamofire-%E6%BA%90%E7%A0%81%E8%B5%8F%E6%9E%90%EF%BC%88%E4%B8%80%EF%BC%89%E5%9F%BA%E7%A1%80%E7%AF%87/

优秀源码阅读:Swift网络库Alamofire
http://www.cocoachina.com/ios/20151118/14240.html

从 Alamofire 源码学习 Swift
http://broccoliii.me/2016/05/07/Learning_Swift_from_Alamofire_source/

Day 12. Instrument

Instruments Tutorial with Swift: Getting Started
https://www.raywenderlich.com/97886/instruments-tutorial-with-swift-getting-started

Day . GCD

KKBOX GCD(Grand Central Dispatch)
https://zonble.gitbooks.io/kkbox-ios-dev/content/threading/gcd.html

2015年5月10日 星期日

iOS學習資源彙整

Swift 入門:

The Swift Programming Language
(蘋果的官方教學 英文版 把前兩章讀完就能大致了解Swift了)
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/index.html#//apple_ref/doc/uid/TP40014097-CH3-ID0

《正體中文版蘋果 Swift 官方教學》
(The Swift Programming Language 的中文版)
http://tommy60703.gitbooks.io/swift-language-traditional-chinese/content/

玩儿转Swift:
(大陸的mooc教學 有豐富講解)
http://www.imooc.com/learn/127

Swifter - Swift 必备 tips:
(每個禮拜三更新的進階Swift)
http://swifter.tips/

Swift iOS:

使用Swift开发iOS8 App实战
(首推這個教程 相當適合入門)
http://www.imooc.com/learn/173

iOS With Girlfriend
(非常入門好懂 一二章節還有提到Sketch設計的部分)
https://youtu.be/LEQpV9znZsk?list=PLdxID9MLTgg-oHgbxcBGtPrgkrvucDOnB

愛瘋一切為蘋果的彼得潘
(Swift書籍的作者 每天發布iOS的好文章)
https://www.facebook.com/iphone.peterpan/?fref=ts

Stanford - Developing iOS 8 Apps with Swift [2015]
(Stanford大學的課程影片)
https://www.youtube.com/playlist?list=PLy7oRd3ashWodnpf8rjfYEkTgwbOEsKfU

// 這邊Swift資源還滿多的
// 以下可以有空再看看 比較進階一點

KKBOX iOS/Mac OS X 基礎開發教材
(進階的iOS教材 建議有一定基礎與OC概念再讀)
https://zonble.gitbooks.io/kkbox-ios-dev/content/

Swift Weather APP
(Swift的進階課程 有用到第三方管理套件CocoaPods)
http://www.imooc.com/learn/149

iOS Human Interface Guidelines
(iOS人機介面指南 這好像有中文版 需要可以找找看)
https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/

App Programming Guide for iOS
https://developer.apple.com/library/prerelease/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/Introduction/Introduction.html#//apple_ref/doc/uid/TP40007072

imooc iOS類別
(慕課網有相當多iOS教學 自行去挖寶吧!)
http://www.imooc.com/course/list?c=ios

一起来做价值百万的Apple Watch App:分歧终端机
(Apple Watch的Swift課程)
http://www.imooc.com/view/242

Let's Swift
(各種Swift應用文章)
http://letsswift.com/

Objective-C:

Objective-C Tutorial
(雖然某些資料偏舊 不過也是個不錯的學習地點)
http://www.tutorialspoint.com/objective_c/

征战Objective-C:
(幕課網的OC入門教學)
http://www.imooc.com/learn/218

Objective-C面向对象初体验:
(OC物件導向的教學)
http://www.imooc.com/learn/373

imooc iOS類別
(慕課網也有很多OC的教學哦)
http://www.imooc.com/course/list?c=ios

2015年3月21日 星期六

iOS Page-Based Application 無法翻頁

有可能是你的pageData有相同的值
無法確認是到哪一頁
所以就一直出現重複的那一頁

2015年2月7日 星期六

Swift iOS TableView searchDisplayController?.searchResultsTableView 失效

今天我要判斷tableview是否是search的狀態
使用了if 來作抉擇 code如下
tableview == searchDisplayController?.searchResultsTableView
結果發現就算在search的時候
這個判斷是也不會相等 令我感到非常地驚奇

所以我就上網找找資料 發現使用

if searchDisplayController?.active {
        // search mode
}
也可以判斷tableview是否是在search
那經過測試 這個方式是行得通的

2015年1月21日 星期三

Swift iOS 輸入完後 讓虛擬鍵盤消失

假設今天我們使用UITextField來做輸入
iOS裝置會跳出一個虛擬鍵盤

我們要如何讓使用者輸入完畢後
按下畫面的其他地方 就讓鍵盤自動消失呢?
(原本iOS是不會讓它彈回去的哦)
如果是這樣的話 這個比較簡單 可以參考以下的程式碼
在你的UIViewController中 重寫touchEnded這個方法
並在裡面叫你的UITextField resignFirstResponder()
就能讓虛擬鍵盤退回去囉

而若是要按下return後 就讓鍵盤消失
則必須要這樣子做 (原先iOS也不會自己消失)
先在UIViewController使用UItextFieldDelegate這個協定
(協定protocol其實就像是Java的介面Interface)
再來讓我們的UITextField可以操作到這個協定
那因為協定是訂在UIViewController身上 所以我們使用self來取得
接著再重寫這個textFieldShouldReturn方法
然後裡面讓他resignFirstResponder()
就完成囉!

參考網址:http://www.imooc.com/video/3704

Swift 在iOS 7~8 對話框 UIAlertView/UIAlertController

假設我們的App有個部分要讓使用者輸入數值
但是使用者忘記輸入 這時我們可以彈出一個框框警告一下
可是我發現在iOS 7跟8的寫法是不一樣的呀
讓我們看看下面的情形吧

這是我們的成果 先看一下


再來看iOS 8的寫法 使用UIAlertController 感覺比較複雜

iOS 7的寫法就簡單多了 可是這在iOS 8是deprecated
建議使用上面的寫法

所以我看到stackoverflow有一個這樣子的寫法
他先判斷UIAlertController這個Class是否存在
如果有存在就使用UIAlertController
回傳值為nil代表不存在 就使用UIAlertView

所以上面的程式碼就改成

當然這樣子寫有一點過於複雜了
所以有人建議說 當你不支援iOS 7的時候
這時在完全用UIAlertController
在這之前用UIAlertView寫 Apple也不會管你的 呵呵



2015年1月19日 星期一

Swift eunm fromRaw() and toRaw() in Xcode 6.1

首先我們先建立一個Rank的列舉 大致如下
我們可以看到Ace = 1 有趣的是
就算我們沒有給Two, Three...值 他也會遞增給予值
所以Two = 2, Three = 3
到最後的Jack = 11, King = 13

要注意的是 在Xcode 6.1當中
已經沒有fromRaw()這個方法了
改為列舉的屬性rawValue
在這邊我們宣告一個常數ace取得Rank中ace的列舉值
ace再轉換成rawValue就可以看到原先的整數值:1

toRaw()這個方法也被替換掉了
取而代之的是以下的寫法
我把raw為1的列舉值記在rawAce當中
你可以看到 他跟ace是相同的列舉值

大家也可以看看stackoverflow 這邊也有人在討論
看看第3個回應 解說得還不錯
http://stackoverflow.com/questions/26444107/enums-rawvalue-property-not-recognized

2015年1月16日 星期五

Macbook Pro

趁大學時 我利用教育方案買了Mac
會想買的原因是最主要的因為想要開發iOS
我家裡原先就有一台抽到的iPad
但是我卻只是拿來玩遊戲
這感覺辜負了上天給我的機會
再加上我妹妹也需要一台電腦
所以我就買了這台Pro 而我舊的Acer就給我妹妹用吧

我預計是在寒假的時候來學習開發iOS的應用程式
因此我在這個時間入手
我在剛剛打開的感覺很刺激
不過OS X已經不像以前了 現在很扁平化 就像iOS7~8
真的跟我的iPad越來越像了 哈哈

一開始最不適應的是中英文的轉換
一定要跑到左上角用滑鼠切
不過知道快捷鍵之後就好了
command + space
其實跟Windows一樣嘛~
在Linux中 切換中文可是用ctrl + alt + 6 呢!
雖然可以改 不過已經習慣了 呵呵

說到輸入法 中文注音在OS X是比較不一樣的
按下大小寫的轉換caps lock 不是轉大小寫
是轉成英文 那要輸入英文該怎麼辦呢?
要按著shift就可以變大小囉
我也接著發現 我在Linux的輸入法也是如此
我本以為是Bug 原來這是Mac的操作模式呀!

再來第二個覺得奇特的就是
點x是關掉應用程式沒有錯
但是並不是結束應用程式
要結束的話請用快捷鍵command + q哦!

話說command鍵就好像Windows的ctrl鍵呢
不過Mac上面也有ctrl啊
叫做control 不過我目前還沒有看到它的用途

還記得2小時之前用的感覺 感覺比Linux用起來還怪異呢
畢竟Linux有些還是跟Windows的概念很像
不過其實用了OS X之後也會發現
很多Linux的操作也是源自OS X的呢!

好啦! 現在我在下載Android Studio 來聊聊點其他的吧
之前去台灣Google總部參觀的時候
發現其實那邊的工程師都是用Mac喲
要不然就是其他品牌的螢幕 但都是OS X的畫面
真的是很有趣呢Google跟Apple不是對手嗎?
Google卻在使用OS X呢 這代表品質真的是很優良吧!

該結束了 難得打那麼長的文章
不過最後我還有一個問題還沒解決
Pro的喇叭在哪呀 我可以播音樂卻看不到喇叭 真怪呢!
希望之後我能把iOS學得很好
開發出大家都喜歡的優質App哦!

2014年12月16日 星期二

Windows Android Studio - No JVM Installation found

有一種情形是 你事先裝了32Bit的版本
可是現在的Android Studio會建議你使用64Bit
所以你必須先下載64Bit的JDK
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
前往 控制台\系統及安全性\系統
點選進階系統設定/進階/環境變數
新增一個環境變數JDK_HOME 指向你64Bit的JDK檔案
再開啟一次Android Studio 就完成了

以上參考至此:
http://stackoverflow.com/questions/24898684/android-studio-no-jvm-installation-found

Linux中 Android Studio Error:Failed to find: com.android.support:appcompat-v7:21.+

基本上安裝需要的套件一下就能解決
但是Linux環境下 由於安裝路徑
可能會存在只有Root才可使用的檔案
請將這個檔案的權限修改為使用者可以寫入的權限
(我的檔案是temp檔)

Anroid Studio Error:compileSdkVersion android-21 requires compiling with JDK 7

請將你的JDK路徑修改成/usr/lib/jvm中的第7版即可

2014年11月26日 星期三

Android資源 VerticalProgressBar

由於Android原先並沒有提供垂直型的ProgressBar
這邊有Halzhang別人寫好的 VerticalProgressBar 大家可以參考利用看看

https://github.com/halzhang/Android-VerticalProgressBar

2014年11月23日 星期日

Android Warning:onTouch should call View#performClick when a click is detected

public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        //some code....
        break;
    case MotionEvent.ACTION_UP:
        v.performClick();//這邊必須補上 否則會有此警告
        break;
    default:
        break;
    }
    return true;
}
參考答案:http://stackoverflow.com/questions/24952312/ontouchlistener-warning-ontouch-should-call-viewperformclick-when-a-click-is-d

Eclipse:workspace in use or cannot be created choose a different one

前往你的workspace資料夾
並且進入.metadata資料夾
並刪除.lock檔案

2014年11月17日 星期一

轉貼:Android 自定義Dialog

http://loginleft.iteye.com/blog/1975980
http://www.cnblogs.com/and_he/archive/2011/09/16/2178716.html
http://www.dotblogs.com.tw/superlm102/archive/2013/02/05/90118.aspx
http://www.cnblogs.com/archie2010/p/3256047.html

2014年11月16日 星期日

轉貼:Git教學 那些老師沒教的事

很大的一份簡報 共238頁
有機會來好好研究一下
http://www.slideshare.net/taichunmin/ss-16096723

2014年11月13日 星期四

Android Studio快捷鍵

Ctrl + Space:程式碼提示
Ctrl + Alt + L:我自訂的自動縮排(因為Linux有衝突 所以我改成Ctrl + Shift + Q)
Ctrl + Y : 刪除整行程式碼
Ctrl + D 有選取部份:複製又貼上/沒選取:貼上
Ctrl + Shift + / :/* */
Ctrl +  / ://
Ctrl + B:顯示錯誤點(同Ctrl + 左鍵)
Shift + F10:執行
Ctrl + Shift + Space:方法的參數提示
Ctrl + F4:關閉頁面

Ctrl + ~:編輯環境的設定
Alt + 左右方向鍵:往...換頁面
Alt + 6:顯示Log Cat (Mac : Command + 6)
Ctrl + F:尋找文字
Ctrl + ~:尋找並取代
Shift + F6:重新命名
其他
Ctrl + N:在編輯器中打開任何Class
Ctrl + Q:觀看類別或方法的文件
Ctrl + F12:導航目前編輯的檔案
Ctrl + O:override methods of the base class
Alt + Insert:generate getter and setter methods for any fields of your class.

2014年11月12日 星期三

Linux Android Studio 自動縮排快捷鍵問題

由於Android Studio的自動縮排快捷鍵是
Ctrl + Alt + L
這個跟Linux的鎖住畫面是相同的
所以你按下Ctrl + Alt + L 你會先被鎖住畫面

因此我們必須修改快捷鍵 前往
File -> Settings -> Editor -> Keymap -> MainMeny -> Code下的Reformat Code
為它添加新的快捷鍵或者是做修改
例如Ctrl + Shift + Q
(這邊很多快捷鍵多被設定過了
要找沒有被設定過的快捷鍵其實還滿難找的)

Kali Linux 安裝Android Studio

首先請自這邊下載
https://developer.android.com/sdk/installing/studio.html

前往Downloads/
cd Downloads/
解壓縮
sudo unzip android-studio-ide-135.1538390-linux.zip
請用root權限來操作 因為一開始他沒有給使用者很大的權限
我們先把他移到~來
sudo mv android-studio ~
給予權限 757
chmod 757 android-studio/
接下來我們要開啟Android Studio 進入android-studio資料夾
cd android-studio/
進入bin檔 可是缺乏權限 所以我們給個權限
sudo chmod 757 bin
再進入bin檔 
cd bin/
sh裡面的studio.sh就可開啟 可是一樣有缺乏權限的問題 
sudo chmod 757 studio.sh 
執行 成功開啟Android Studio
sh studio.sh 

轉貼:新版eclipse 出現appcompat的問題

解法在此 新版問題還滿多的
難怪有些人跑去弄Android Studio了
http://jpress.tw/android-project-error-appcompat_v7-other-problem