Android開発者がiOS開発を始めるときに便利かもなAPI対応表

Android開発者がiOS開発を始める時にあると便利かもしれないAPI対応表。
もちろん完全に一致はしないです。似たような役割ということで...
本当に初めての人向けです。逆方向（iOSからAndroid）でもある程度いけると思います。

言語の基本
----------------------------
|  内容(Java用語)  | Java | ObjC|
|-----|----|----|
| 32bit整数 | int | int(long), int32_t |
| 64bit整数 | long | long long, int64_t|
| 真偽値 | boolean, true/false | BOOL YES/NO |
| 自分自身 | this | self|
| 空ポインタ | null | nil |
| 文字列 | "Hello" | @"Hello" (※1)|
|----------|-----------|------------|
|メソッド宣言 |  bool funcName(int value) | - (BOOL) funcName:(int)value |
|staticメソッド| static int staticFunc(String value) | + (int) staticFunc:(NSString *)value |
|メソッド呼び出し | object.fuction(parameter) | [object function:parameter] |
|クラス宣言| class MyClass {} | @interface MyClass |
|クラス実装 | （宣言と同じ） | @implementation MyClass |
|インターフェイス宣言 | interface MyInterface | @protocol MyInterface |
|インターフェイス実装 | class MyClass implements MyInterface | @interface MyClass&lt;MyInterface&gt; |
|引数にインターフェイス | void func(MyInterface obj) | - (void) func:(id&lt;MyInterface&gt;)obj |
|----------|-----------|------------|
| foreach | for (Object o : array) | for (id object in array) |
| ログ出力 | System.out.println("DEBUG:" + string) | NSLog(@"DEBUG:%@", string) (※2) |

※1: ""はchar[]、@""はNSString*。ほとんどの場合後者を使う
※2: %@はNSString*,  %sがchar*、%dがint、%qiがlong long

よく使うクラス
----------------------------------
|  内容(Java用語)  | Java | ObjC|
|-----|----|----|
|文字列 | String | NSString |
|可変文字列 | StringBuilder | NSMutableString |
|文字列連結 | str1 + str2 | [NSString stringWithFormat:@"%@%@", str1, str2] |
|リスト（配列) | ArrayList | NSArray(不変), NSMutableArray(可変) |
|要素追加| list.add(obj) | \[array addObject:obj] |
|要素取得 | list.get(index) | \[array objectAtIndex:index] (※1) |
|要素数 | list.size(), array.length | \[array count] |
|マップ | Map | NSDictionary, NSMutableDictionary |
|要素追加 | map.put(key, value) | \[dict setObject:value forKey:key] (※2) |
|要素取得 | map.get(key) | \[dict objectForKey:key] (※3) |

※1 array[index] でもアクセス可能
※2 keyとvalueの順番が逆なので要注意。dict[key]=valueで設定可能
※3 dict[key]で取得も可能。


View関係
--------------------------------------
|Android| iOS|
|-----|-----|
|Activity(Fragment) | UIViewController|
|View | UIView |
|View.OnClickListener | 該当なし。view addTarget: action: forControlEvents　が同等の役割 |
|ImageView | UIImageVIew |
|TextView | UILabel|
|Button | UIButton |
|EditText | UITextField, UITextBox |
|Bitmap(Drawableに近い役割でもある) | UIImage |
|ListView | UITableView |
|Adapter | UITableViewDataSource |
|AdapterView.OnXXXClickListener | UITableViewDelegate |


その他
-----------------------------------------
 **一般にゲッタメソッドにはgetを付けません**
obj.getValue() が、 [obj value]　になります。
もっともプロパティ宣言されていることがおおく、 obj.value でいけることも。

 **ジェネリクスの概念はないです**
ガマンしましょう...いい方法をご存じの方は教えてください...
NSArray&lt;NSString&gt;とかすごいやりたいのですが..

 **ObjCでprivateなプロパティ、メソッドを宣言する方法**
.mファイルに

```objc:MyClass.m
@interface MyClass()
@property (nonatomic) NSString *privateStringVar;
- (void) privateMethod;
@end

@implementation MyClass 
///
@end
```

とかく。


 **定数の宣言方法**
3種類紹介します。他にもいろいろあると思います。
(1)#define。同一のものが宣言されてたら上書きされてしまうため非推奨。でも楽なので自分は小規模実験アプリではやってます。

```objc:Const.h
#define MY_VALUE @"value"  
```

(2)privateな定数なら.mにstatic const。よくkを先頭につける

```objc:Const.m
static NSString *const kMyValue= @"COSNT";
```

(3)グローバルな定数ならextern const。他とかぶるとビルドエラー。かぶらないようクラス名を先頭に。

```objc:
//MyClass.h
extern const NSString *MyClassValue;

//MyClass.m
const NSString *MyClassValue = @"Value";
```