Open7
Objective-Cを勉強してみる
目的
- ソースコードを良んで理解できるようになるのが目的
- 実務でObjective-Cが必要になったので勉強する
- 今の自分がどれほどの期間で新しい言語を覚えられるか挑戦してみる
手段
- ネット
- ドキュメント
- 記事
書籍を持っていない&ドキュメントで勉強してみたいため。
今の実力
#import <Foundation/NSObject.h> //あまりCやってないので完全に理解してない
#import <Foundation/NSString.h>
#import <stdio.h>
@interface MyTestClass : NSObject { // NSObjectとは?
NSString *myTestString;
}
- (void)setMyTestString :(NSString *)testString; // -(マイナス)記号がついてるのは何?()記号は戻り値?
- (void)printMyTestString;
@end //このendはinterface?
//これがクラス?
@implementation MyTestClass : NSObject //implementationって何?
//全体的に書き方がわからない
- (void)setMyTestString :(NSString *)testString { // (NSString *)ってなんだ?
myTestString = testString;
}
- (void)printMyTestString {
printf("myTestString is %s \n", [myTestString UTF8String]);
}
@end
int main(void) {
id myTestClass; //id?
myTestClass = [[MyTestClass alloc] init]; //[]の意味が分からない
[myTestClass setMyTestString:@"aiueo"]; //同様に分からない
[myTestClass printMyTestString];
return 0;
}
https://atmarkit.itmedia.co.jp/ait/articles/0809/09/news142.html のコードを参照
調査
公式
APIの定義? アーカイブだが、プログラム構造について書かれている。
その他
丁寧そうなので、これからやってみる
ポインタが分からない
何気にポインタを忘れかけていたり、普段使っているわけでもなかったので勉強した。苦しんで覚えるCがとても良かった。
objective-cではインスタンス宣言したものをポインタ変数に入れるが、その理由はそのオブジェクトを直接操作したいからということがよく分かった。
- (void)printString:(NSString *)aString {
NSLog(@"%@", aString);
}
NSString *helloString = [[NSString alloc] initWithString:@"Hello, World!"];
[self printString:helloString];
的に書くので、Go味を感じられた。
世界一わかりやすいポインタ
#include <stdio.h>
int main(void)
{
int *p;
int i;
p = &i;
*p = 10; /* 通常変数モードに切り替えたポインタ変数に代入 */
printf("*p = %d\n", *p);
printf("i = %d\n", i);
return 0;
}
ポインタ変数
int *p
int型のポインタ。アドレスが入る。
ポインタ変数のバイトサイズは変わらない(メモリ4GBのコンピュータであれば、0 ~ 42億)が、型によって使うメモリのサイズは違うので、その違い。int型のポインタをインクリメントすればアドレスは4つずれる。
int *p;
int i;
p = &i;
*p = 10;
ポインタ変数に間接参照演算子(*)をつけると、普通の変数と同じように(代入処理など)使える。
アドレス
p = &i;
&をつけることでその変数のアドレスを取得できる