這是舊的專案在Xcode 10以上編譯時可能會發生的問題,因為Xcode 10新增了一個 New Build System,此機制會檢查是否會有不必要的重建,所以問題有可能就此產生
解決方法為: (Xcode 10.1為列)
1. 去File --> Project Settings --> 將 Build System: 預設的 New Build System改為Legacy Build System
2020年4月19日 星期日
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
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同樣路徑裡面即可解決。
解決方法: 將較新版本的Xcode裡的/Contents/Developer/Platforms/iPhoneOS.platform/DeviceSupport路徑下的支援iOS版本複製到較舊版本的Xcode同樣路徑裡面即可解決。
練英文聽力的方法
常常有朋友會問我如何訓練英文聽力,我通常會回答最好的方式就是直接認識外國的朋友,而且是可以用英文跟你對話的外國朋友(非外國人,但是願意跟你用英文對話練習的台灣朋友也是可以),因為營造英文環境是最直接的方法。
然而,現實中並不是所有人都可以有個可以與你直接用英文練習的對象,因此,此時另一個練習英文聽力的最好方法就是每天聽BBC NEWS的Live...但對初學者來說..BBC NEWS過於艱深難懂..所以我更推薦找一部外語片..然後第一次單純用聽的..聽不懂也沒關係..就是聽就對了~~ 然後再放第二次..這一次...邊聽邊看該句英文的意思..並看看與自己想的是否一樣...但三次..再放一次看自己聽不聽得懂..所以等於一部片子放三次練習。
只要每天堅持不斷的練習,有朝一日英文聽力必定有所進步。
訂閱:
文章 (Atom)
解決iOS 14上如果更換預設瀏覽器(例如從Safari換成Chrome)時, 用Scheme架構會無法回到上一頁的問題
如果遇到以下問題時 須在Info裡的LSApplicationQueriesSchemes裡設定多增加https, 如下圖:
-
今天分享如何解決Xcode在執行測試時遇到的indexing paused的問題 ,遇到這個問題時會導致Xcode無法順利的執行測試 ,例如無法順利地利用模擬器或真機做測試而一直卡在那裡 ,如下畫面: 而在網路上找到的解決方法有: (以下舉例我找到的答案) Ope...
-
用Carthage升級管理SDK的方法 Carthage是另外一種類似CocoaPods的Xcode第三方套件管理,而要用 Carthage升級套件時該如何做呢? 首先, 打開終端機到專案根目錄並下touch Cartfile(名字一定要打這樣), 然後再打vim Cartfi...
-
最近自己在學習建立後端的Server所以順便記錄一下當作筆記 ,使用的工具為 IntelliJ IDEA 2016.2.4 ,這邊先從建立一個Java Web Application + Tomcat開始 ,然後再慢慢增加內容 。 一. Create New Project...
-
Xcode 11以上與Xcode 10的差異 Xcode 11開始的開發工具不管是新建立的專案或是整個UI介面都與Xcode 10系列有所差異 ,本篇就簡短的列出幾個不一樣的地方: 一. 專案架構 Xcode 11 開始新建專案時會多一個檔案(或...
-
常常有朋友會問我如何訓練英文聽力 ,我通常會回答最好的方式就是直接認識外國的朋友 ,而且是可以用英文跟你對話的外國朋友(非外國人 ,但是願意跟你用英文對話練習的台灣朋友也是可以 ) ,因為營造英文環境是最直接的方法 。 然而 ,現實中並不是所有人都可以有個可以與你直接用英文練習的...
-
程式宣告變數時會佔用記憶體,而記憶體分為三個部份來存放這些變數,分別是global、stack與heap。一一分別說明如下: 1. global: 用來放全域變數、靜態變數(static)等等。 ex: static NSString *URL = @...