Swift part12at TECH
Swift part12 - 暇つぶし2ch93:デフォルトの名無しさん
19/04/19 09:25:43.46 UPSvai8f0.net
メモリーリークは?

94:90
19/04/19 09:42:40.71 EB/Z3yYvM.net
会社でたのでIDかわりました
>>92
画面オフにせずに数試してみます、私の書き方も変ですよねごめんなさい
>>93
メモリリークは分かりません、そういえば実行時に70Mbほどですが、処理が進むにつれて増えていきます。

95:デフォルトの名無しさん
19/04/19 09:58:09.31 UPSvai8f0.net
僕はiOS畑でmacOSでの開発経験は無いけど、クロージャー内での相互強参照には注意してます。
廃棄される事のないオブジェクトのプロパティをクロージャーにキャプチャしてないでしょうか。

96:90
19/04/19 10:56:31.11 Tu1+OCMX0.net
またもやIDかわりました。
>>95
初めて本格的に書いているので見当違いな事を言ってるかも知れませんが、変数を宣言する時にweakを付けたりはしていないです。
強参照や弱参照も疑ってみます

97:90
19/04/19 10:58:45.87 Tu1+OCMX0.net
書いていて気付きましたが
メインスレッドとサブスレッドでクラス外の変数にそれぞれアクセスしています、順番は合っていますが(前後しません)ループ終わりに初期化したりするほうが良いですか?代入から参照を繰り返しています

98:デフォルトの名無しさん
19/04/19 12:09:11.98 UPSvai8f0.net
クロージャーは実行時点での変数などを内部に保持しますので、他のオブジェクトのプロパティやメソッドをクロージャーで実行する際には相互強参照を起こさない様、注意が必要です。
ライフサイクル内で破棄される事のないviewなどは要注意ですね。
変数宣言時というより、クロージャーにキャプチャリストを置いて対処します。
{[weak self] in self?.anyMethod()}
といった書式です。

99:デフォルトの名無しさん
19/04/21 01:30:21.36 iFSUeFmu0.net
構造体のプロパティに全部初期値を与えると、メンバーワイズイニシャライザが使えなくなるのはなぜなの?
イニシャライザ書くのめんどくさいよ。
くそ仕様なのでは?

100:デフォルトの名無しさん
19/04/21 01:32:58.67 iFSUeFmu0.net
>>99 は defaultイニシャライザが定義されてるから、メンバーワイズイニシャライザが消えたってことはわかるけど、なぜこの仕様なのかがわからない。
メンバーワイズイニシャライザを使えなくするのが疑問。

101:デフォルトの名無しさん
19/04/21 11:36:42.98 b6xf/OvP0.net
xcodeに関する話題はどこか別スレ有りますか?
部品の探し方とかコードとの関連付けとか、ハウツーサイト見ても何の為にやってるのか理解できなくて。

102:デフォルトの名無しさん
19/04/21 12:05:11.84 pCSfgkO00.net
>>72
>文法も結構習得した
と思ったたら
>>73
のようにまたリセットするのがswift
1年に一回
知識入れ替え
今までのソース全部メンテ
コンバートしても
エラーと警告が大量にでていらない仕事のオンパレード

103:デフォルトの名無しさん
19/04/21 13:08:05.97 uR3YTCI+0.net
Xcode part15
スレリンク(mac板)

104:デフォルトの名無しさん
19/04/22 02:31:27.06 SWJDNqxR0.net
新MC板だったか,有り難う。

105:デフォルトの名無しさん
19/04/23 14:13:15.43 FQZTVnj/0.net
>>85 の質問をさせてもらったのですが、ご報告です。
Macのスリープ"しない"
ディスプレイのスリープ"しない"
スクリーンセーバ"開始しない"
この状態で実行すると止まらずに動いております。
問題の切り分けを進めたいのですがヒントが有れば教えて欲しいです。
作っているAppでdispatch.queue.mainを使用してラベルやインジケータを更新しているのですが、Macがスリープや画面オフ、またはスクリーンセーバ開始で問題は出るのでしょうか?

106:デフォルトの名無しさん
19/04/23 14:29:52.93 eM8URmwI0.net
処理中にメモリー使用量が増えていくとの書き込みも有りましたが、Instrumentsを起動してAllocationsで#Persistentを確かめた感じでしょうか。

107:デフォルトの名無しさん
19/04/23 14:37:24.94 FQZTVnj/0.net
>>106
ありがとうございます、確認してみます

108:デフォルトの名無しさん
19/04/23 14:46:02.85 FQZTVnj/0.net
こ、こんなツール知らなかった!
なんか便利そうな感じです。
見た感じループ1週でチョビチョビ増えてる感じですね、データベースへの書き込み処理と読み込みかな?
問題はない感じっぽいです、このツールすごい

109:デフォルトの名無しさん
19/04/23 15:07:02.13 FQZTVnj/0.net
連投申し訳ありません。
ループの過程でsleep()を入れてるのですが、なんとなくこれが原因っぽいような気がしてきました

110:デフォルトの名無しさん
19/04/23 15:12:05.68 eM8URmwI0.net
#Persis tentは廃棄されずに存続しているオブジェクトです。もしここが増え続けている様ですと、強参照が疑われます。
また、iOSではラベルの更新などにはプロパティオブザーバーを使う事がよくあります。
プロパティ毎に、値が更新された時に実行する処理を指定できます。
var score = 0 { didSet { scoreLavel.text = “Score : \(score)”} }
といった感じです。
macOSでも同様かは解りませんが...
ご参考まで、

111:デフォルトの名無しさん
19/04/23 19:09:15.92 zVNwrrWL0.net
ディスプレイのスリープやスクリーンセーバでプロセスがサスペンド(?)するのはちょっと考えられないけど(もしかしてもしかしてmacOSのナンかあるかもだけど)、
URLリンク(developer.apple.com)
Listing 2 Preventing sleep using I/O Kit in Mac OS X 10.6 Snow Leopard
で、プログラムからMacのスリープやディスプレイのスリープを抑制(というかしないように)ができるよ
アクティビティモニタで状態は確認できる。「非スリープ」の項目。出てない場合はリストタイトルを右クリックで
IOPMAssertionCreateWithName で はい
IOPMAssertionRelease で いいえ
「はい」のプロセスがひとつでもあればスリープしない

112:デフォルトの名無しさん
19/04/23 21:16:14.40 d6R+4rUw0.net
>>111
今ちょうどIOPMAssertionCreateWithNameを追加して試そうとしていました、ありがとうございます。
またご報告します、他の原因も探してみます

113:デフォルトの名無しさん
19/04/24 13:25:01.92 mjBvBaH40.net
IOPMAssertionCreateWithNameを使ってNoIdleSleepを設定することで回避できたようです。
よく考えてみるとシステムがスリープになるとプロセスが止まるのは当たり前のことなのですね、気づく事が出来なくて恥ずかしいですが今後の糧とします。
皆さん本当にありがとうございました。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch