2020年4月19日 星期日

Xcoed build error: multiple commands produce XXXX

這是舊的專案在Xcode 10以上編譯時可能會發生的問題,因為Xcode 10新增了一個 New Build System,此機制會檢查是否會有不必要的重建,所以問題有可能就此產生

解決方法為: (Xcode 10.1為列)
1. 去File --> Project Settings --> 將 Build System: 預設的 New Build System改為Legacy Build System

2020年4月16日 星期四

Swift 中的 open,public,internal,fileprivate,private等存取權限介紹

Swift有五個存取權限的關鍵字,分別是open、public、internal、fileprivate和private,一一分別說明如下:

1. private:
private訪問級別所修飾的屬性或者方法只能在當前類裡訪問,具有最低的存取權限宣告的區塊內才可取得,也就是{ } 內才可取得。若為class,可subclass和override。


2. fileprivate:
fileprivate訪問級別所修飾的屬性或者方法在當前的Swift文件裡可以訪問。


3. internal:
默認的存取層級,internal修飾符可忽略不寫internal訪問級別所修飾的屬性或方法在源代碼所在的整個模塊都可以訪問。如果是框架或者庫,則在整個框架內部都可以訪問,框架由外部代碼所引用時,則不可以訪問。如果是App代碼,也是在整個App內部可以訪問。


4. public:
可以被任何人訪問。但其他module中不可以被override和繼承,而在module內可以被override和繼承。


5. open:
可以被任何人使用,包括override和繼承。用於宣告class以及class內所有的成員,層級最高,所有module和source file都可取得,且可subclass和override此class。

存取權限的大小由大到小分別為: open -> public -> internal -> fileprivate -> private

2020年4月15日 星期三

Stack 與 Heap的介紹



程式宣告變數時會佔用記憶體,而記憶體分為三個部份來存放這些變數,分別是global、stack與heap。一一分別說明如下:

1. global:

用來放全域變數、靜態變數(static)等等。 ex: static NSString *URL = @"xxxxxxx"

2. stack:

台灣稱為堆疊,大陸叫做棧,具有LIFO(後進先出)的特性,記憶體配置方式是由高到低。
存放區域變數、函式的參數與函式的位址等等,由系統管理,必須在編譯時期為已知。這些變數的回收會發生在它從堆疊pop出去的時候,因為個數、大小什麼的都是已知,所以系統知道怎麼進行配置與回收。 ex: int age = 41

3. heap:

台灣正體中文稱為堆積,大陸叫做堆,記憶體配置方式是由低到高。
這裡的記憶體由使用者負責進行回收,配置則是由malloc或是new來負責。使用這裡的記憶體主要是用在編譯時期還不知道大小或個數的變數。例如說,你需要用一個陣列,這個陣列的大小要在執行的時候由使用者的輸入來決定,那你就只能使用動態配置,也就是把這個陣列配置在heap中。ex: NSArray *array = [NSArray array];
參考連結:
1. http://tung168.pixnet.net/blog/post/284837600-global%2Cheap%2Cstack
2. http://wp.mlab.tw/?p=312

2020年4月14日 星期二

解決XCode實機測試時發生的問題: Could not locate device support files

問題描述: 當這問題發生時表示實體機器iPhone的iOS版本比該版本Xcode所支援的裝置iOS版本高(例如手機的iOS版本為12.4,但Xcode所支援的iOS版本只到11.0)

解決方法: 將較新版本的Xcode裡的/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport路徑下的支援iOS版本複製到較舊版本的Xcode同樣路徑裡面即可解決

練英文聽力的方法

常常有朋友會問我如何訓練英文聽力,我通常會回答最好的方式就是直接認識外國的朋友,而且是可以用英文跟你對話的外國朋友(非外國人,但是願意跟你用英文對話練習的台灣朋友也是可以),因為營造英文環境是最直接的方法

然而,現實中並不是所有人都可以有個可以與你直接用英文練習的對象,因此,此時另一個練習英文聽力的最好方法就是每天聽BBC NEWS的Live...但對初學者來說..BBC NEWS過於艱深難懂..所以我更推薦找一部外語片..然後第一次單純用聽的..聽不懂也沒關係..就是聽就對了~~ 然後再放第二次..這一次...邊聽邊看該句英文的意思..並看看與自己想的是否一樣...但三次..再放一次看自己聽不聽得懂..所以等於一部片子放三次練習

只要每天堅持不斷的練習,有朝一日英文聽力必定有所進步

解決iOS 14上如果更換預設瀏覽器(例如從Safari換成Chrome)時, 用Scheme架構會無法回到上一頁的問題

 如果遇到以下問題時 須在Info裡的LSApplicationQueriesSchemes裡設定多增加https, 如下圖: