【Console Application】外部関数 32【学習記】

打鍵数多くなる使い方の関数をライブラリ化する話🤤

Q.
すぐ終わるって聞いたけど?
A.
そんなわけないじゃん🤪
というかローカルのみの git の挙動が(主に xcode のせいで)おかしくて消えたりやり直したりで無駄に時間取られてストレス😞

→前回参考にした記事は stringWithFormat がさも va_list に対応してそうな記述だったが実際は対応してなかった😞
→ stringWithFormat で押し通したい場合は va_arg 等で型を全部変換する必要が有る
→ va_list をそのまま使いたいなら initWithFormat の arguments メッセージで対応可能

void myNSStringPrintf(NSString *format,...)
{
	va_list	args;
	va_start(args, format);
	NSString *str = [[NSString alloc] initWithFormat:format arguments:args];
	va_end(args);
	//
	printf("%s\n",[str UTF8String]);
}
# .gitignore メモ
DerivedData/
.gitignore
.DS_Store
*.xcodepro/xcuserdata/
*.xcodepro/project.xcworkspace/

#Objective_C
#NSString #stringWithFormat #initWithFormat
#gitignore
#学習記


動作確認

さてそれじゃ、打鍵数の多い出力関数の置き換えをして動作確認しようかな🤤
まずライブラリビルド👇ポチっとな

画像1

あっ作り直したから prefix いじってない🤪修正修正w

Xcode 4.2 / iOS開発でスタティックライブラリを利用する
https://ndevmemo.blog.shinobi.jp/%E9%96%8B%E7%99%BA/xcode%204.2%20-%20ios%E9%96%8B%E7%99%BA%E3%81%A7%E3%82%B9%E3%82%BF%E3%83%86%E3%82%A3%E3%83%83%E3%82%AF%E3%83%A9%E3%82%A4%E3%83%96%E3%83%A9%E3%83%AA%E3%82%92%E5%88%A9%E7%94%A8%E3%81%99%E3%82%8B

なんで helloWorld 側のヘッダはビルドする前にエラーになるんだろうと思ってちょっと探していたらこんなのが出てきた🤔
何か変わるのかなって思ってヘッダの設定 public に変えてビルドしたら

画像2

ヘッダが纏まってコピーされてる🤪イイゾー
なんだ、やっぱりヘッダ集める機能有るんじゃん🤤(知らないだけ
これなら一々各フォルダからコピーしなくて済む☺️

画像3

型違うよって怒られた🙄

画像4

@ を外すとエラーは消える😞
そりゃまぁ宣言が const char *format だししょうがない🙄

画像5

では NSString に変更して

画像6

@ を復活して

画像7

Arguments のとこの表示ヨシ👈🤪

画像8

画像9

🙄🙄🙄

for の所が死んでるのかな?
autoreleasepool の記述が悪さをしてるっぽい気がする🤔

画像10

画像11

🙄🙄🙄

よく見ると最初に1箇所だけ入れ替えて試した Arguments の隣の個数表示もおかしな事になってるねこれ…🙄
感じからすると、中のポインタのアドレス値をそのまんま表示してる…のかなこれは🙄

Objective-Cで可変引数
https://tea-leaves.jp/home/ja/article/1365947182
可変引数を別のメソッドに渡す。
…(中略)…
可変引数を直接、initWithFormat:argumens:に渡して呼び出すことができます。

stringWithFormat は
va_list に
対応してない!!
🙄🙄🙄

画像12

画像13

ふー、なんとかなった🤤

画像14

画像15

画像16

ちょっとだけ autoreleasepool を賢く変更🤤(自分が賢いとは言ってない


次回は

やっと型とか文法とかの基礎見て行けそう🤤

この記事が気に入ったらサポートをしてみませんか?