iOS学習ノート(2)-Objective-Cベース
13162 ワード
本文の略書の住所:http://www.jianshu.com/p/fbe4ab2edad2
前の記事はiOSが開発した画面と解像度に関する内容をまとめました.iOSの主な開発言語であるobjective-cをまとめました.
1最初のプロジェクトを作成
Xcodeを開いて、
main.mの上にある、
次はメイン関数で、c言語の基本と同じで、次のコードが多くなりました.
3.1基本変数タイプ
基本変数タイプはint、float、char、BOOL(YESまたはNO)があり、C言語とほぼ一致します.下記の例を通して、基本的な使い方を見てもいいです.コードは参考資料1から来ます.
Objective-Cは対象に向けた言語で、以前は対象に向けてプログラミングしたことがあるなら、クラスは青写真で、対象は一例です.基本タイプintは単一の値だけを記憶し、オブジェクトは複数の属性または値を記憶することができる.例えばButtonオブジェクトはサイズ、色、ラベルなどがあります.また、オブジェクトは、例えばImageオブジェクトが自分のサイズを変更したり、自分の絵をスクリーンに描いたりする動作も実行されます.
NSString
たとえば下のコードの中に
古いバージョンのobjective-cでは、一般的に次のようなクラスを作成します.インスタンス変数を宣言する必要があります.
最後にNSArayとNSDictionaryを見ます.NSArayは配列であり、配列要素は任意のNSObjectタイプであってもよい.以下のようにNSArayに複数のPersonオブジェクトを追加すると、NSArryは可変タイプではないので、作成後に動的に要素を追加することはできません.動的に参加するには、NSMutable Arayを使用すればいいです.NSDictionaryは辞書タイプであり、NSMutble Dicturryは可変辞書タイプであり、なお、辞書のkeyはNSObjectタイプまたはサブタイプでなければならず、intまたはNSIntegerタイプの値ではない.使用方法はコードを参照してください.http://www.raywenderlich.com/40293/learn-to-code-ios-apps-2-strings-arrays-objects-and-classes Objective-C属性およびインスタンス変数
前の記事はiOSが開発した画面と解像度に関する内容をまとめました.iOSの主な開発言語であるobjective-cをまとめました.
1最初のプロジェクトを作成
Xcodeを開いて、
File->New->Project
はプロジェクトを作成します.ここで私達はObjective-C言語を勉強しています.だからOS Xを選択して、このセクションの中のAppplicationを作成して、Command Line Tool
プロジェクトを作成して、プロジェクト名、組織名などを入力して、作成が完了したら、プロジェクトの中からmain.mファイルが生成されたことが分かります.内容は以下の通りです.Xcodeの上の運転ボタンを直接クリックすると、コンソールからHello, World!
が出力されます.//
// main.m
// My First Project
//
// Created by ssj on 16/1/20.
// Copyright © 2016 ease. All rights reserved.
//
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
@autoreleasepool {
// insert code here...
NSLog(@"Hello, World!");
}
return 0;
}
2コード構造main.mの上にある、
//
の先頭の動作注釈は、C言語と同じである.コード行のNSLogはObjcでよく使用されるデバッグ出力であり、コンソールでログを出力するために使用される.NSLog(@"Hello, World!");
コメントコードの下にはimport文が続きます.#import <Foundation/Foundation.h>
Xcodeでは、すべてのコードを一つのファイルに書く必要はなく、import文で導入できます.アプリをコンパイルすると、Xcodeは対応ファイルのコンパイルを見つけます.アップル社はいくつかのOSの特性をfram ewark(フレームワーク)にパッケージ化しました.例えば、上のFoundationフレームは、アプリの基礎的な運行環境を提供しています.次はメイン関数で、c言語の基本と同じで、次のコードが多くなりました.
autoreleasepool
といいます.アプリを開発する時、ボタンでもテキストでもメモリを消費します.Cのように手動でリリースすると、メモリが漏れやすくなります.autrelease poolは自動的にメモリを管理するために使われています.もちろんXcodeはAutomatic Reference Counting
(ARC)を提供してメモリの管理を助けています.autreleasepoolとARCの後には専門的に文章でその基本原理をまとめます.@autoreleasepool {
3言語の基礎3.1基本変数タイプ
基本変数タイプはint、float、char、BOOL(YESまたはNO)があり、C言語とほぼ一致します.下記の例を通して、基本的な使い方を見てもいいです.コードは参考資料1から来ます.
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
int answer = 0;
int guess = 0;
int turn = 0;
answer = arc4random() % 100 + 1;
while (guess != answer) {
turn++;
NSLog(@"Guess #%i: Enter a number between 1 and 100", turn);
scanf("%i", &guess);
if (guess > answer) {
NSLog(@"Lower!");
}
else if (guess < answer) {
NSLog(@"Higher!");
}
else {
NSLog(@"Correct! The answer was %i", answer);
}
}
NSLog(@"It took you %i tries", turn);
}
return 0;
}
3.2類と対象Objective-Cは対象に向けた言語で、以前は対象に向けてプログラミングしたことがあるなら、クラスは青写真で、対象は一例です.基本タイプintは単一の値だけを記憶し、オブジェクトは複数の属性または値を記憶することができる.例えばButtonオブジェクトはサイズ、色、ラベルなどがあります.また、オブジェクトは、例えばImageオブジェクトが自分のサイズを変更したり、自分の絵をスクリーンに描いたりする動作も実行されます.
NSString
たとえば下のコードの中に
NSString *name = @"Mike";
nameについて説明すると、nameはNSStringタイプのオブジェクトであり、nameはポインタであるため、より正確にはNSStringオブジェクトを指すポインタであるということが分かります.上に静止した内容を格納する以外に、次のように文字列を作成することもできます.int x = 10;
NSString *myString = [NSString stringWithFormat:@"The variable x stores the number %i", x];
NSLog(@"%@", myString);
Objective-Cでは、メッセージを送ることによって、あるオブジェクトにいくつかの操作を実行させることができます.例えば上のstring WithFormatは一つのmessageで、対象に向かう中で、私達もよくstring WithFormatを一つの方法と呼びます.:
の後に続くのが方法パラメータです.ここのパラメータは2つあります.一つは前の文字列で、一つはxです.注意してください.プリント文字列は%@
を使います.元の文字列があって、なぜNSStringを使うのかという質問があるかもしれませんが、その理由は簡単です.NSStringも格納されているCの文字列です.ただし、lengthなどの方法が付いています.C StringからNSStringに変換するのも便利です.以下の方法で実現できます.NSString *inputString = [NSString stringWithCString:cstring encoding:1];
クラスとオブジェクト古いバージョンのobjective-cでは、一般的に次のようなクラスを作成します.インスタンス変数を宣言する必要があります.
property
キーワードを使用していません.次のコードのようにPersonクラスを作成し、2つのインスタンス変数nameとageがあります.//Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject {
NSString *name;
int age;
}
- (void)printInfo;
- (void)setInfo:(NSString *)name age:(int)age;
@end
//Person.m
#import "Person.h"
@implementation Person
- (void)printInfo {
NSLog(@"name=%@, age=%d", name, age);
}
- (void)setInfo: (NSString *)pname age:(int)page {
name = pname;
age = page;
}
@end
//main.m
#import <Foundation/Foundation.h>
#import "Person.h"
int main(int argc, const char * argv[]) {
@autoreleasepool {
Person *p = [[Person alloc] init];
[p setInfo:@" " age:29];
[p printInfo];
}
return 0;
}
アップル社がその後、コンパイラをGCCからLLVMに変更し、property
のキーワードを追加すると、もはやステートメントインスタンス変数が必要なくなります.ステートメント属性だけが必要です.コンパイラは自動的にアンダースコアのインスタンス変数とgetter/setter
方法を生成します.実例変数を参照することは、下線_name
によってもよく、self.name
によってもよく、self.name
は、実際には属性を呼び出すgetter/setter
方法であることに留意されたい.//Person.h
#import <Foundation/Foundation.h>
@interface Person : NSObject;
@property (nonatomic, strong) NSString *name;
@property int age;
- (void)printInfo;
- (void)setInfo:(NSString *)name age:(int)age;
@end
//Person.m
#import "Person.h"
@implementation Person
- (void)printInfo {
NSLog(@"name=%@, age=%d", _name, _age);
}
- (void)setInfo: (NSString *)name age:(int)age {
self.name = name; // [self setName:name];
_age = age;
}
@end
また、@synthesizeキーワードがあり、属性に対応するインスタンス変数を指定します.たとえばPerson.mでインスタンス変数nameをmynameと名前を変更すると、アクセスインスタンス変数が使用できなくなります.name、mynameに変えなければなりません.#import "Person.h"
@implementation Person
@synthesize name = myname;
- (void)printInfo {
NSLog(@"name=%@, age=%d", myname, _age);
}
- (void)setInfo: (NSString *)name age:(int)age {
[self setName:name];
self.age = age;
}
@end
NSAray&NSDictionaryとその可変タイプ最後にNSArayとNSDictionaryを見ます.NSArayは配列であり、配列要素は任意のNSObjectタイプであってもよい.以下のようにNSArayに複数のPersonオブジェクトを追加すると、NSArryは可変タイプではないので、作成後に動的に要素を追加することはできません.動的に参加するには、NSMutable Arayを使用すればいいです.NSDictionaryは辞書タイプであり、NSMutble Dicturryは可変辞書タイプであり、なお、辞書のkeyはNSObjectタイプまたはサブタイプでなければならず、intまたはNSIntegerタイプの値ではない.使用方法はコードを参照してください.
Person *p = [[Person alloc] init];
[p setInfo:@" " age:29];
Person *p2 = [[Person alloc] init];
[p2 setInfo:@" " age:21];
NSArray *array = [[NSArray alloc] initWithObjects:p, p2, nil];
for (Person *p in array) {
[p printInfo];
}
Person *p3 = [[Person alloc] init];
[p3 setInfo:@" " age:23];
NSMutableArray *marray = [[NSMutableArray alloc] initWithObjects:p, p2, nil];
[marray addObject:p3];
for (Person *p in marray) {
[p printInfo];
}
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:@" ", @"name", @"29", @"age", nil];
for (NSString *key in dict) {
NSLog(@"key=%@, val=%@", key, [dict objectForKey:key]);
}
4参考資料