頭と尻尾はくれてやる!

iOSアプリなどの開発日記です


ブロック構文で勘違いしてたこと

Objective-Cのブロック構文を理解していなかったというお話だよ。

実のところブロック構文って積極的には使ってこなかったんだけど、もしかして便利なんじゃない?って感じで恐る恐る試しているところなんだ。
そしたら案の定(?)躓いたよ。

シンプルにして書くと次のような流れでやっていたんだ。
{
    int i = 10;
        
    int (^Plus)(int) = ^(int j) {
        return i+j;
    };
        
    NSLog(@"%d",Plus(5));//15
}
↑まずは意図通りに動いてくれるコード。
もともとあるiって変数の値に引数で渡した値を足して、それを返してもらうってブロック構文。
iの値は変えないから__blockとかは不要。
ここまではいいんだよ。

それじゃあってことでやってみたのが次のコード。最後の2行を追加しただけ。
{
     int i = 10;
        
    int (^Plus)(int) = ^(int j) {
        return i+j;
    };
        
    NSLog(@"%d",Plus(5));//15
        
    i = 20;
    NSLog(@"%d",Plus(5));//15
}
最初はこれは20+5で25が返ってくると思っていたんだけど、返ってくる値は15。
ここで変数iの値を変えてブロック構文を呼び出しても無駄なんだな。

なるほど、なるほど。ブロック構文ってスコープ外の値でも読んでくれる関数、みたいに理解していたんだけど、こういうものなんだね。


キャンペーン中!ソフトバンクでiTunesカード買ってきた

今ソフトバンクのお店でiTunesカードを買うとiTunesのデジタルコードをプレゼントしてくれるってキャンペーンをやってるんだよ。

ソフトバンクショップ iTunes Card Spring キャンペーン | ソフトバンクモバイル
↑これね。
キャンペーンが始まってずっと買いに行かねば!と思っていたんだけど、昨日ようやく買ってきたよ。

130317.jpg

↑5000円で6000円分のお買い物ができることに。20%お得。
今までiTunesカードはセブンイレブンのキャンペーンで買ってたんだけど、こちらは20%分のnanacoポイントが返ってくるもの。率で言えば同じだね。

iTunesカードをiPhoneで無事登録して、ソフトバンクのサイトでキャンペーンも応募完了。
現在デジタルコード待ち。


シャープの空気清浄機を買ってみた

シャープの空気清浄機(FU-A51)を購入して1ヶ月ほど経過したのでレビューなんぞを書くよ。

ここ7年ほど使ってるダイキンの空気清浄機(MC707-W)が"挙動不審"でアラームがいつもチカチカしてたりするんだ。おまけに購入時に付いてたフィルター(1年ごとに交換)もなくなり、いざ購入しようとすると案外お高い、ってことで新規購入することに決めたんだよ。

ウチでは湿度は間に合ってる(以前購入した温度湿度計のおかげ!)、ということがわかっているので加湿機能は不要。



↑手頃なのを探していたんだけど、結局購入したのはこれ。
シャープのサイトを見ると同じ14畳で最新のFU-B51というのがあるんだけど、サイトをいくら見てもどう違うのかさっぱりわからない。結局シャープのサポートに聞いてみたら、中身は同じで運転や空気の状況を示す部分の表示方法が若干異なる程度らしい、ってことでFU-A51を購入。
アマゾンのレビューにある通り、若干「ちちち」という音がするんだけど寝てる時に運転することもないし今のところ音に関して気になったことはないね。

構造が簡単なので掃除もラク、、、と言っても掃除機で吸うしかやってないけどね。フィルターの一つは水洗いできるらしいよ。

本当にセンサー動作してるの?って思う時もあるけど、まあ値段相応なんじゃないかな。


RSSリーダーを変えようと思ったが

以下の記事をすでに書いてて今日にでもアップしようかなと思っていたんだけど、昨日Google Readerがサービス停止を発表しちゃったよ。
慣れてきて、なかなかいいんじゃない!と思ってきたところだけに残念。
どこか買収してサービスはそのまま継続ってならないかなあ、、、




普段RSSリーダーでたくさんのブログなんかをMacで見るのにライブドアのlivedoor Readerってのを使っているんだ。
特に不満もないんだけど、iOSデバイスとの連携がもう一つなので他のを試してみようかなって思ってさ。
他の、と言ってもGoogle Reader一つだけ試しているところなんだけどね。

だいたいの使い方はわかった。今のところ自分のやりたいことはできてる。

[簡単に登録したい]
普通にSafariで見てる時にボタン一つで登録したいよね。
Google Readerの設定/追加機能ってところに「サイトをブラウズしながら登録する」ってのがあるからそれをツールバーにでも置いておくとOK。
俺はSafariのツールバーに置いてるのでcommand + 数字で一撃なんだ。

[未読の記事だけ表示したい]
最初はすべてのブログのタイトルが画面左のエリアに表示されていたんだけど、画面左の登録フィードってところを展開すると

Google Readerの設定

↑こんなのが表示される。デフォルトは「すべて表示」になってたんだけどこれを「更新されたアイテムを表示」ってのがあるから選択すると未読のみ表示してくれる。

[ブログを切り替える]
まず、ブログを切り替えるには Shift + n/p でOK。
あるブログの記事を全部読んで次へ行く場合にこれを使うと選択されているブログが変わる。nだと下へ、pだと上へ行く。
さらに選択されてるブログの記事を表示させるには Shift + o を入力。これは若干面倒な気がする。切り替えた時点で表示して欲しいとこだけどね、、、

[次の記事を表示する]
一つのブログなりサイトなんかでいくつも更新記事がある場合、サクサクと表示させたい場合はショートカットの j/k でOK。
ちゃんと画面上部に記事タイトルが来てくれるのがイイ。

[元記事へ行く]
元記事で読みたい場合もショートカットの v でOK。なんの略なんだろうね?よくわからないけど、ともかく v で別タブで表示してくれる。


とまあこんな感じで使っているんだけど、基本「全文表示」で使っている。もう一つの「リスト表示」だとまた違った操作になるみたい。
キーボード ショートカットはありますか。 - Google リーダー ヘルプ
↑ショートカットもいろいろあるので試してみるといいよ。たくさん書いてるけど使うのは限られてる。

なお、「全文表示」で全体(タイトルやら画像も)を眺めるんだけど画面をスクロールさせるのにはトラックパッドなんだよね、、、スペースとか矢印キーでもいけるんだけど、もうひとつスムーズじゃないのでどうしてもトラックパッドがいいんだよねえ。これさえなければずっと手をキーボードの上に乗せておけるんだけどね(これは前のlivedoor Readerでも同じだったけど)。

若干の不満が、既読の記事も表示されるので未読記事をサクサクとこなしていったらいつのまにか以前に読んだ記事になってた、なんてことも。
何か設定でもあるのかなあ、、、?


return i++;は何が返ってくる?

今更あれなんだけど、インクリメント、デクリメントの話なんだ。

整数型の数を一つ増やすとか減らす時に
i++;
とかするでしょ。
これ++(減らす時、デクリメントは--だね)が変数の前後でどうやら意味が違うってのは聞いたことがあったんだけど、実はたいして意識していなかったんだ。
というのもたいてい変数++;って書き方で不具合なかったしさ。どちらにせよ増えるんだろってなもんだよ。

ところが先日、動作確認のために簡単なメソッドを作ってたんだ。
-(int)testMethod:(int)i
{
    return i++;
}
↑こんな形。
これだとiの後に++があるから、後にインクリメントされるんだよ。何の後かって、returnの後なんだ。だからこれだと変数iの値はインクリメントされていないまま返ってくるんだ。そんなもん返すなよーって感じだけど、そういうもんだからそうなるよね。
テスト用のメソッドだったから簡単にあーそうか、とわかったからよかったけど、本気のプロジェクト内でこれが起きてたら、、、おお怖っ!




Copyright ©頭と尻尾はくれてやる!. Powered by FC2 Blog. Template by eriraha.