現在objective-cを勉強しているのですが、メソッドの引数や
戻り値が具体的にどう動いているのかを観察できるような
アプリやプログラムを探しております。書籍・サイトどちらでもよいので
そのありかを教えて頂けないでしょうか。
以上、何卒宜しくお願い致します。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

http://www.compileonline.com/compile_objective-c …

これに似たサイトは、ほかにもいくつか見つかります。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2014/08/22 05:43

Xcodeのデバッガ機能を使ったことないんでしょうか?



以下を参考にしてください。
http://blogios.stack3.net/archives/776
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2014/08/22 05:44

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

Qobjective-cでの引数について

お世話になります。

引数の使い方について以下の様な事が可能なのか分からなくて困ってしまい質問します。
検索等は行いましたが目的のものが見つからなかったので、、

以下ですが、あるボタンをタップすると、buttonDidPushを実行するプログラムがあったとします。

@implementation ViewController

-(void)viewDidLoad{

~中略~

[button addTarget: self
action:@selector(buttonDidPush)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button];
}

-(void)buttonDidPush{
   処理
}

@end


ここで聞きたいのは、
ボタンのところで、引数(数値変数 x )をbuttonDidPushに持っていくことができるかどうかなのですが、
例えば以下のように変更しました。

action:@selector(buttonDidPush)

action:@selector(buttonDidPush:x:)

-(void)buttonDidPush{

-(void)buttonDidPush(Integer)x{

としましたが、build successで一応シミュレータは動きましたが、
ボタンをタップするとmain.mのほうでエラーが出てしまい動きませんでした。
なんとなく文法が間違ってるんじゃないかと思いますが、どこか心当たりのある方、よろしくお願いいたします。

尚、数値xはintで宣言済みです。

main.mでのエラー内容は

int retval = UIApplicationMain(argc, argv, nil, @"testAppDelegate");
のラインで、「Thread1:Program received signal: ""SIGABRT.」と出ていました。

また、私自身が何かobjective-cの文法について重大な勘違いをしている可能性もあります・・

お世話になります。

引数の使い方について以下の様な事が可能なのか分からなくて困ってしまい質問します。
検索等は行いましたが目的のものが見つからなかったので、、

以下ですが、あるボタンをタップすると、buttonDidPushを実行するプログラムがあったとします。

@implementation ViewController

-(void)viewDidLoad{

~中略~

[button addTarget: self
action:@selector(buttonDidPush)
forControlEvents:UIControlEventTouchUpInside];
[self.view addSubview:button...続きを読む

Aベストアンサー

幾層かに間違いが重なっています。

まず、Objective-Cの文法に「-(void)buttonDidPush(Integer)x」は合致しません。引数は、メソッド名にコロン(:)をつけたあと、ないしキーワードにコロンを付けたあとにおくのが、Objective-Cの文法です。

「Integer」という型はありません。typedefを使い、カスタムで定義しない限り、使える型ではありません。「NSInteger」の勘違いではありませんか?

「-(void)buttonDidPush(Integer)x」は、訂正するとこうなります。「-(void)buttonDidPush: (NSInteger)x」

しかしこれでもまだ間違いが残っています。
UIControl(UIButtonは、UIControlのサブクラス)のアクションに使えるメソッドの形式はきまっています。メソッド名を仮に「myAction」とすると、
(1) - (void)myAction
(2) - (void)myAction: (id)sender
(3) - (void)myAction: (id)sender forEvent: (UIEvent *)event
この3パターンです。
(1)は、引数を持たないメソッド。(2)は、アクションを送ったコントロール(ボタン)自身を引数に持ちます。

なお、UIView(UIControlは、UIViewのサブクラス)は、プロパティ「tag」を持ち、整数値(int)が型になります。これを使って、アクションの送信先に、整数値を送ることができます。

- (void)myAction: (id)sender {
UIButton *btn = (UIButton *)sender;
int x = btn.tag;
}

幾層かに間違いが重なっています。

まず、Objective-Cの文法に「-(void)buttonDidPush(Integer)x」は合致しません。引数は、メソッド名にコロン(:)をつけたあと、ないしキーワードにコロンを付けたあとにおくのが、Objective-Cの文法です。

「Integer」という型はありません。typedefを使い、カスタムで定義しない限り、使える型ではありません。「NSInteger」の勘違いではありませんか?

「-(void)buttonDidPush(Integer)x」は、訂正するとこうなります。「-(void)buttonDidPush: (NSInteger)x」

しかしこ...続きを読む

Q【Objective-C】文法 メソッドの定義について

Objective-Cの勉強を始めたばかりの者です。
メソッドの定義について、混乱してきたので教えてください。

例えば、二つの数値を引数に与えるメソッドsetDataを作るとします。
このメソッドを以下のような方法で呼び出します。

id data;
data = [[Data alloc] init];
[data setData:3:4];

この場合のメソッドの定義は以下の様になりますよね。

- (void)setData:(int)argx:(int)argy;

次にラベルを使った引数についてですが、

- (void)setData:(int)argx y(int)argy;

と定義したら、呼び出しは、

[data setData:3 y:4];

となりますよね。
この記述に違和感を感じるんです。

ここまでは前ふりでして、以下が質問になるのですが、
メソッド名とは別に二つの引数用のラベルを設ける事ってできないのですか?

つまりは、例えば、

[data setData x:3 y:4];

のような感じの記述です。

それとも、「ラベルを付けられるのは二つ目の引数から」ってのが仕様なんですか?

以上、ご指導のほど、宜しくお願いいたします。

Objective-Cの勉強を始めたばかりの者です。
メソッドの定義について、混乱してきたので教えてください。

例えば、二つの数値を引数に与えるメソッドsetDataを作るとします。
このメソッドを以下のような方法で呼び出します。

id data;
data = [[Data alloc] init];
[data setData:3:4];

この場合のメソッドの定義は以下の様になりますよね。

- (void)setData:(int)argx:(int)argy;

次にラベルを使った引数についてですが、

- (void)setData:(int)argx y(int)argy;

と定義したら、...続きを読む

Aベストアンサー

>メソッド名とは別に二つの引数用のラベルを設ける事ってできないのですか?

できないです。
というか「ラベル」という捉え方をするのが良くないような。

C++とかでメソッドって呼ぶのが一般的なので混同されがちですが、Objective-Cでは、オブジェクトにメッセージを送信することで計算を行うとしてます。そのメッセージとはキーワードと引数値から構成されており、例えば[data setData:3 y:4]なら、
キーワード= setData:y:
引数値=3と4
になります。なので、「setData:y:」でひとつものとして考える必要があり、Visual Basicとかみたいにオプショナル引数(あるいは名前つき引数)とは別物ということです。

参考: http://developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocObjectsClasses.html#//apple_ref/doc/uid/TP30001163-CH11-SW5

ここらへんObjective-Cがメッセージ式に対してどういうコードを生成するかを理解すると、納得できるかと。
もちろんがんばればオプショナル引数みたいなの言語仕様として実装できるのでしょうが、処理系が複雑になって苦労するわりに得るものが少ないと(当時は)考えられたのでしょう。

>メソッド名とは別に二つの引数用のラベルを設ける事ってできないのですか?

できないです。
というか「ラベル」という捉え方をするのが良くないような。

C++とかでメソッドって呼ぶのが一般的なので混同されがちですが、Objective-Cでは、オブジェクトにメッセージを送信することで計算を行うとしてます。そのメッセージとはキーワードと引数値から構成されており、例えば[data setData:3 y:4]なら、
キーワード= setData:y:
引数値=3と4
になります。なので、「setData:y:」でひとつものとして考え...続きを読む

QObjective-Cのメソッド効率化

下のコードは
UIButton のbutton1を押すと
そのボタン自身が一回だけ10px上に移動し、
戻るコードです。

例えばこのボタンがひとつだけでなく
10個ある場合を考えて

- (IBAction)move2 {
int x = button2.center.x;
int y = button2.center.y;
~~~
}
と10個記述していくのではなく、
うまく関数化したいのですが
どのような式を考えたら良いのでしょうか?

よろしくお願い致します。


- (IBAction)move1 {
int x = button1.center.x;
int y = button1.center.y;

[UIView animateWithDuration:0.2f
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
button1.center = CGPointMake(x, y-10);
}
completion:^(BOOL finished){
[UIView animateWithDuration:0.3f
delay:0
options:UIViewAnimationOptionCurveEaseOut
animations:^{
button1.center = CGPointMake(x, y);
}
completion:^(BOOL finished){

}];
}];
}

下のコードは
UIButton のbutton1を押すと
そのボタン自身が一回だけ10px上に移動し、
戻るコードです。

例えばこのボタンがひとつだけでなく
10個ある場合を考えて

- (IBAction)move2 {
int x = button2.center.x;
int y = button2.center.y;
~~~
}
と10個記述していくのではなく、
うまく関数化したいのですが
どのような式を考えたら良いのでしょうか?

よろしくお願い致します。


- (IBAction)move1 {
int x = button1.center.x;
int y = button1.center.y;

[UIView anim...続きを読む

Aベストアンサー

> 「UIViewAnimationOptionAutoreverse || UIViewAnimationOptionCurveEaseOut」

あ~、間違った。条件式にしてしまいました。正しくは……

「UIViewAnimationOptionAutoreverse | UIViewAnimationOptionCurveEaseOut」

Qobjective-Cのメソッドの意味

「UIInterpolatingMotionEffectTypeTiltAlongVerticalAxis」
とはどういう意味のメソッドなのでしょうか?
どなたか教えて頂けないでしょうか。
以上、何卒宜しくお願い致します。

Aベストアンサー

それはメソッドではありませんね。定数(Constant)です。
メソッドと決めつけていたから、クラスリファレンスを検索しても、見つけられなかったのでしょう。Constantだとわかっていれば、クラスリファレンスを検索したら、見つかりますよ。

QObjective-Cのメソッド、または文字列操作の実装について

今、iPhoneアプリを開発しているのですが
実機で実行するとSIGABRTを受け取ってアプリがクラッシュしてしまいます。
クラッシュログを解析すると、以下のようなコードでクラッシュしていることがわかりました。
-----
+(NSString*)methodSample
{
NSDate* aDate = [ NSDate date ];
NSString* aStr = [ aDate description ];
// クラッシュログで出てくるのは次のreturn文のところ
return [ aStr substringWithRange:NSMakeRange(5,5) ];
}
-----
このコードに何らかの不正な処理がありそうな気がするんですが、
このコードの問題点ってどこなのでしょうか。

どなたかわかる方がいらっしゃいましたら教えてください。

Aベストアンサー

No.2です。

returnのタイミングでリリースされているのではなく、戻り値として取得ポインタを使用しようとしたタイミングでアボートとしているのだろうと思います。

私の環境で同じ関数を作成し、そのポインタをNSLogで使用しようとしたところ、NSLog中にエラーとなりました。


人気Q&Aランキング

おすすめ情報