IngramChen 積分 0

android app 閃退原因多是 exception,大部份是 NullPointerException。

我不是說 android 有 GC 所以 bug 會比 swift iOS 少,閃退會比較少。我只是說 iOS crash 的原因很多是 dangling pointer,是因為要手動管理記憶體造成的。

這個現象對 server 是不利的。Java 是很多 NPE,但在 server 環境下就只是個 bug 而已,process 還是可以繼續服務。swift 踩到記憶體就是整個 crash,這不利 long running application 啊。(mobile 上到是無所謂)

ARC 也許可以再進化,解決這個問題吧 (例如它找到一個演算法完全解決 circular reference),不然只要讓開發者去寫 unowned 這種東西,就是有機會踩記憶體 crash。(有誰的 app 沒 unowned ??)

siuying 積分 0

很難説大部分原因,因為有很多原因。這樣說吧,android app用 vm 有 GC, 閃退會比較少嗎?據我看的統計不是這樣。

IngramChen 積分 0

那閃退的大部份原因是什麼?

siuying 積分 0

所以我們會用Swift,一個不會有NullPointerException的語言. 至於memory mamagement就交給compiler專家做...

siuying 積分 0

你是誤會了甚麼, mobile app 是會 crash, 但很少是因為'dangling pointer'. 你說的'哪個app不閃退'和Memory management根本沒直接關係好不好?

「完全不全會踩錯的GC」如果GC可以完全不會踩錯, ARC為何不可呢?

IngramChen 積分 0

mysql nginx...etc 什麼的也是用 c 寫的,但我覺得那是集大眾人的智慧的結晶辦到的偉業。

我不覺得一般網頁應用程式開發員達得到他們的水準啦

IngramChen 積分 0

memory leak 和 process crash 怎麼相提並論。有 GC 又不代表不會有 memory leak,這前提還要討論嗎?

問題是沒 GC 你除了處理 memory leak ,還要擔心不小心踩到記憶體,踩到記憶體的懲罰又很嚴重 (尤其不適合要跑好幾個月的 process)

ARC 的確可有效減少踩錯,但跟完全不會踩錯的 GC 比又差了一截,這是很明顯的缺點啊。

siuying 積分 0 編輯於

至於crash就是另一個問題, 那也不一定只是 dangling pointer (Swift 本身沒有pointer, 你不用 C code / UnsafePointer 想搞出個 dangling pointer 也還不易), 但nginx Apache httpd 也是用C 寫不見得有問題。

siuying 積分 0

這種「X不是萬能的」有甚麼用呢?GC也不是萬能的, 我也見過Java 的 Server process OOM。

IngramChen 積分 0 編輯於

ARC 又不是萬能的,我不相信有個 iOS app 從來沒踩過 dangling pointer。哪個具規模的 app 不會閃退?

siuying 積分 0

有關 GC, 正好相反, Swift 的 ARC 原理是自動加入 alloc/dealloc, 所以有一個(理論上)穩定的 memory model。比如某個Variable已經不會再用, 那compiler就可以立即把那些memory release。

IngramChen 積分 0 編輯於

swift ... 這種沒有 GC 的語言,適合跑 server application 嗎?

server 的程式通常都要跑個幾個月,有一點點 memory leak 就會逐漸累積,跟 desktop/mobile app 的使用行為差很多啊。mobile 上就算有點 leak,用戶也是常重開 app,沒什麼差。

除了那種很專精功能的 server 程式,通常寫應用程式型的 server ,需求和功能都很雜亂 (尤其是開發了一兩年後… ) 這種情形下還要開發者自行管理記憶體真是太痛苦。

還有,踩到 dangling pointer 怎麼辦?整個 swift process crash 嗎?一旦 crash 了,process 裡的 state 就通通消失了… (反觀 Java 的 NullPointerException,死也是死個 request 而已)

yukai 積分 3

react native 有 WebView Component 可以直接塞 html 顯示,我是 撿別人現成的1 ,可以自動根據內容改大小。React Native 寫起來就跟 React 差不多 XD,只是有些 Native Component 還是有點問題,像 ListView 效能就不太好;熟悉的話搭 UI 是挺快的,Flexbox layout 威能啊。

IngramChen 積分 0

js 現成 library 是輸出 html 啊,react native 顯示一大堆 html ok ?

yukai 積分 0 編輯於

markdown 直接用 js 現成的 library,反而花很少時間 :p

IngramChen 積分 0

話說 React native 好寫嗎?

kaif 有一部份是要處理 markdown,像這種沒有現在的 library 就會很痛苦了…

Kros 積分 0

原來想要被 Feature 還可以寫信過去!

siuying 積分 0

在 Apple 的藍圖裡應該沒有 Objective-C 了,他們會建議新的東西用 Swift 作,所以 package manager 也只會支援 Swift 。

iOS library 只用 binary 發佈通常只有 close source software ,一般也是用 source code 的吧。

IngramChen 積分 0

那這樣不就要兩套方法來管理了,而且,framework manager 又在哪裡?又回到 cocoapods?

swift 很需要 binary distribution 是因為 iOS 的關係。iOS library 只能用 binary 形式發佈的有很多吧 (像 aws sdk,和那些 ads 相關的 sdk 都是)

siuying 積分 0

binary 已經可以用 framework 去做吧。而且要 cross platform deploy source 比較簡單, go/ruby 也不是這樣嗎

IngramChen 積分 0

這是 source code 的 package manager ,不能 distribute binary... 這樣不是很受限嗎?

IngramChen 積分 0

蠻好奇的,swift2 有沒有真的完全取代 objective-c ?