cocoa objective-c の return と * の意味がわかりません

このQ&Aのポイント
  • cocoa objective-c の return と * の意味がわかりません。objective-c の参考書を何冊か購入して勉強しているのですが、本に載っていないようでネットでもいくら探しても(探し方が悪いのか)行き当たらないので困ってしまいました。先に進めなくなってしまいましたので教えていただきたく投稿しました。
  • 以下のコード(Project Builder起動直後のMyDocument.m)で return self; の return と - (NSString *)windowNibName の * です 使用法を教えていただけたら助かります。よろしくお願いします。
  • #cocoa #objective-c #return #* #コーディング
回答を見る
  • ベストアンサー

cocoa objective-c の return と * の意味がわかりません。

objective-c の参考書を何冊か購入して 勉強しているのですが、本に載っていないようで ネットでもいくら探しても(探し方が悪いのか)行き当たらないので困ってしまいました。 先に進めなくなってしまいましたので教えていただきたく 投稿しました。 以下のコード(Project Builder起動直後のMyDocument.m)で return self; の return と - (NSString *)windowNibName の * です 使用法を教えていただけたら助かります。 よろしくお願いします。 #import "MyDocument.h" @implementation MyDocument - (id)init { self = [super init]; if (self) { message and return nil. } return self; } - (NSString *)windowNibName { return @"MyDocument"; } - (void)windowControllerDidLoadNib:(NSWindowController *) aController { [super windowControllerDidLoadNib:aController]; } - (NSData *)dataRepresentationOfType:(NSString *)aType { return nil; } - (BOOL)loadDataRepresentation:(NSData *)data ofType:(NSString *)aType { return YES; } @end

質問者が選んだベストアンサー

  • ベストアンサー
  • onosuke
  • ベストアンサー率67% (310/456)
回答No.1

どちらもC言語の知識の範疇です。 Objective-Cは、C言語+"Objective-C"特有部分という構成なので、そのベースとなるC言語までの記載がないのでしょう。 書籍等、C言語のものを一つ用意してください。 C++と違い、Objective-CはC言語そのままをベースにしているので、本当に、普通のC言語を参考にして大丈夫ですよ。 (C++ではC言語に変造を加えている)

関連するQ&A

  • objective-cで困っています。

    objective-cをトライ&エラーで試しながら学習しているのですが、 下記の内容で行き詰っており、知恵をお借りしたいと思い投稿しました。 現在tml5のcanvasを使ってお絵描きアプリを作りました。このcanvasに書き込んだデータをiPhoneのカメラロールに保存することをトライしています。いろいろ調べてみると「HTML5 CANVASの描画内容をUIImage経由でカメラロールに保存する」という記事をみつけました。http://lab.spec5zigen.com/archives/html5-canvasの描画内容をuiimage経由でカメラロールに保存する/ その記事を参考に #import "ViewController.h" @interface ViewController () @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. // UIWebViewのインスタンス化 CGRect rect = self.view.frame; UIWebView *webView = [[UIWebView alloc]initWithFrame:rect]; // Webページの大きさを自動的に画面にフィットさせる webView.scalesPageToFit = YES; // デリゲートを指定 webView.delegate = self; // URLを指定 NSURL *url = [NSURL URLWithString:@"http://xxxxxxxxxxxxxxxxxxxxxx"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; // リクエストを投げる [webView loadRequest:request]; // UIWebViewのインスタンスをビューに追加 [self.view addSubview:webView]; } - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { if(![[request.URL.scheme] isEqualToString:@"sp5canvas2app"]){ return YES; } NSString * requestString = [[request URL] absoluteString]; NSArray *params = [requestString componentsSeparatedByString:@"data:image/png;base64,"]; // dataFromBase64String // NSData+Base64 Copyright 2009 Matt Gallagher. All rights reserved. // http://www.cocoawithlove.com/2009/06/base64-encoding-options-on-mac-and.html NSData * decodedData = [NSData dataFromBase64String:[params objectAtIndex:1]];//decode base64 to NSData UIImage *image = [UIImage imageWithData:decodedData]; UIImageWriteToSavedPhotosAlbum(image, self, nil, nil);//カメラロールに保存 return NO; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end としてみたのですが、 if(![[request.URL.scheme] isEqualToString:@"sp5canvas2app"]){ の行にExpected identifierというエラーが、 NSData * decodedData = [NSData dataFromBase64String:[params objectAtIndex:1]];の行にNo known class method for selector 'dataFromBase64String:'というエラーが という状況で詰っている状況です。 メソッドの定義や宣言されていないメソッドを使っているなどのエラーということを調べて分かったのですが、objective-cを始めたばかりで初歩的なミスかも知れませんがエラーの対応の仕方がまだまだよくわかっていません。 スキーマなど参考にしたサイトの内容も十分に理解しているのではないのですが、「sp5canvas2app」の部分は自由に変えていいのでしょうか? 解決の仕方を教えていただけないでしょうか? 宜しくお願いします。

  • objective-Cについてご相談があります。

    現在objective-cを勉強中なのですが、 jsonについて教えて頂きたい事があります。 jsonのファイル・データ・オブジェクトそれぞれを 取得する必要があると習ったのですが、それらの違いが 今ひとつ分かりません。 下記のような記述なのですが、それぞれの違いをどなたか ご教示頂けないでしょうか。 // 対象Jsonファイル取得 NSBundle *bnd = [NSBundle mainBundle]; NSString *ptn = [bnd pathForResource:@"Test01" ofType:@"json"]; NSURL *url = [NSURL fileURLWithPath:ptn]; // Jsonオブジェクトの取得 NSURLRequest *req =[NSURLRequest requestWithURL:url]; NSData *dat = [NSURLConnection sendSynchronousRequest:req returningResponse:nil error:nil]; // Jsonデータの取得 NSDictionary *dick01 = (NSDictionary *) [NSJSONSerialization JSONObjectWithData:dat options:NSJSONReadingMutableContainers error:nil]; 以上、何卒宜しくお願い致します。

  • Objective-C, Cocoaアプリ

    こんにちわ。初歩的な質問ですが、Objective-C, Cocoa Application両方とも初心者です。ボボタンを押すことで、NSTableViewに新しいデータを追加したいのですが、 デバッグして、データ自体はちゃんとデータソースの方に追加されているのですが、TableViewが表示していないようです。 reloadData, setNeedsDisplayも両方ためしたのですが、表示されません。 ちなみに、新しいデータを追加する関数ですが、tableViewがロードされる前にコールしたときはちゃんと新しいデータがtableViewに表示されています。 コードです。 ****************** dataはNSMutableArrayでItemInfoというクラスのArrayです。(ItemInfoは単純にNSString* nameとint priceの2つのデータを持っているクラスです。) この関数はすべてNSViewControllerのメンバ関数です。 -------コード---------- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { if(self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]){ data = [[NSMutableArray alloc]initWithCapacity:5]; [data addObject:[[ItemInfo alloc]initWithName:@"Item1" price:100]]; [self addNewItem:nil]; //ここでのaddNewItemは反映され、TableViewには合計2つのデータが表示されています。 } return self; } -(IBAction)addNewItem:(id)sender { //ここはボタンを押したときにちゃんと実行されているのを確認しています。 //実際にdataにも新しいデータが追加されていることをデバッガで確認済みです。 ItemInfo *newItem = [[ItemInfo alloc]initWithName:@"NewItem" price:300]; [data addObject: newItem]; [tableView reloadData]; } #pragma mark - #pragma mark Table View Datasource - (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView { return [data count]; } - (id)tableView:(NSTableView *)aTableView objectValueForTableColumn:(NSTableColumn *)aTableColumn row:(NSInteger)rowIndex { //tableView には2つのColumnがあり、一つ目はItemInfo内のnameを、2つ目にはpriceを表示しています。 if([aTableColumn.identifier isEqual:@"Item"]){ return [[data objectAtIndex:rowIndex] name]; }else if([aTableColumn.identifier isEqual:@"Price"]){ return [NSString stringWithFormat:@"%d", [[data objectAtIndex:rowIndex] price]]; } return nil; } ------コード終わり------ 開発環境は以下の通りです。 OS: MacOSX10.6 SnowLeopard Xcode Version3.2.4 Cocoa Application

  • Objective-C,NSTimerを使って1秒毎に10秒かかる処理

    Objective-C,NSTimerを使って1秒毎に10秒かかる処理を実行させる事ってできますか? 例えば、以下に書いたとすると、(行頭全角スペースです。) @interface testTimer : NSObject {  NSTimer *timer; } @end @implementation testTimer - (id) init { timer = [NSTimer scheduledTimerWithTimeInterval:1.0  target: self  selector:@selector(timeUpdate:)  userInfo:nil  repeats:YES]; } - (void) timeUpdate:(id)sender {  NSLog(@"%@",[NSDate date]);   [NSThread sleepUntilDate:[[NSDate date] addTimeInterval:10.0]]; } @end 毎秒タイムスタンプは出力されませんでした。 以上、ご指導の程、よろしくお願いいたします。

  • Objective-CのNSTaskからAutomatorで作成したア

    Objective-CのNSTaskからAutomatorで作成したアプリを複数回実行するとフリーズするのですが、原因が分からないのでアドバイスをいただきたく書き込みさせていただきます。 Automatorの処理は、「イメージファイルにサムネールアイコンを追加」するだけの処理です。1度の実行で複数枚の画像を1枚ずつAutomatorに渡して処理を行います。 Automatorの実行は以下のような内容で実行しています。 -(BOOL)imageIcon(NSString *)filePath // 画像ファイルパス { NSTask *task = [[NSTask alloc]init]; NSURL *urlfilePath = [NSURL fileURLWithPath:filePath]; NSString *Command = [NSString stringWithFormat:@"/usr/bin/open"]; NSArray *argumets = [NSArray arrayWithObjects:@"-a", @"Automatorアプリのパス", [NSString stringWithFormat:@"%@",urlfilePath], nil]; [task setLaunchPath:Command]; [task setArguments:argumets]; [task launch]; [task waitUntilExit]; // 処理が完了していないのに処理を継続するのを防ぐ為、sleep [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]]; if([self processList:@"Automatorアプリ名"]){ //psコマンドを実行して、処理中ならYESを返す。 [NSThread sleepUntilDate:[NSDate dateWithTimeIntervalSinceNow:3]]; } [task release]; return YES; } 上記の関数を各画像の処理時に呼び出しています。 上記の関数の先頭部にreturn YESで強制的に処理をすると、フリーズは発生しません。 また、フリーズした時は、Automatorアプリが実行中のままとなりますが、アクテビティモニタで見るとAutomatorアプリはありません。 Xcodeのコンソールにも、何も表示はありません。 説明がまとまっていなくてすいません。 どなたか、Objective-Cに精通されておられるかたおられまいたら、アドバイスをお願い致します。

  • iPhone SDK・Xcode・Objective-cでのプロジェク

    iPhone SDK・Xcode・Objective-cでのプロジェクト共通定数クラスの定義について はじめて質問させていただきます。内容に不足あればすぐ修正しますのでご指摘ください。 当方iPhone SDK・Xcode・Objective-cを利用してアプリ開発をしています。 経験はCが我流で10年ほど、仕事ではjavaをメインに使っております。 それでアプリケーション全体から参照する定数を定義したいのですが使い勝手がいまひとつでして皆さんにご教示願いたい次第です。 javaではAppConst.javaというクラスファイルを作ってpublic const int NUMBER_ROW = 1と書き、 あとは使う側でその定数クラスをインクルードしておけば、AppConst.NUMBER_ROWという風に呼び出せたかと思います。(社内のフレームワークのおかげかもしれませんが…) Objective-cでも同様にしようと以下のように定数クラス AppConstを作りました。 #import <Foundation/Foundation.h> @interface AppConst : NSObject { NSInteger NUMBEROFFONT; } @property (nonatomic, assign) NSInteger NUMBEROFFONT; -------- #import "AppConst.h" @implementation AppConst @synthesize NUMBEROFFONT; -(id) init { self = [super init]; if (self != nil) { NUMBEROFFONT = 5; } return (self); } @end しかしこのクラスですと、参照側でインクルードするだけではなく、定数クラスのインスタンスを作らないと定数にアクセスできません。 #import "AppConst.h" (NSInteger) testMethod { AppConst *appConst = [[[AppConst alloc] init] autorelease]; return appConst.NUMBEROFFONT; } 使う度にインスタンスを作るのは面倒ですしメモリとしてもよくないように感じます。 もっと賢いやりかたがあればよろしくご教示のほどお願いします。

  • Objective-Cクラス変数インスタンス変数

    現在iPhoneアプリを作成するために、Objective-Cの勉強をしています。しかしそこでわからないことがあり、質問させていただきました。 それは私がインスタンス変数(メンバ変数)を宣言してつかっているつもりなのですが、クラス変数の様な動きをするのです。 具体的にコードで説明します。 @implementation Main : NSObject - (void)hello{ [[Hoge alloc]init]; [[Hoge alloc]init]; } @end @implementation Hoge : NSObject NSNumber *i; - (id)init{ [super init]; NSLog(@"%d",i.intvalue); i = [NSNumber numberWithInt:123]; return self; } @end 出力結果 null 123 今手元にソースがないので正確ではないかもしれませんが、こんな感じです。hファイルにはとくになにもかいてません。 このソースの動きはmainでHogeクラスのインスタンスを二回作成することによって、initを二回呼んでいます。 疑問点は出力結果の挙動が予想外なことです。私としてはインスタンス作成時のiは初期化されていないため、 出力結果 null null になるのを期待しています。しかし二回目のinitでは前回に作成した123というデータが引き継がれています。この挙動はiはインスタンス変数ではなく、クラス変数のようにみえます。 しかしObjective-Cではクラス変数は存在しないとどっかのサイトに書いていました。 以上が質問です。なにかお気づきになった点があればごかいとういただけると幸いです。

  • 【Objective-C】プロパテイについて

    Objectiv-Cの勉強を始めたばかりの者です。 プロパテイの機能を理解する為に以下のようなプログラムを書きました。 例1)まずは、プロパテイを使わない例です。 ーーーーーーー data.h ーーーーーーー #import <Foundation/NSObject.h> #import <Foundation/NSString.h> @interface Data : NSObject { NSString* str; } - (void)setStr:(NSString* )arg; - (NSString*)retStr; @end ーーーーーーー data.m ーーーーーーー #import "Data.h" @implementation Data - (NSString*) retStr{ return str; } - (void)setStr:(NSString*) arg{ [arg retain]; [str release]; str = arg; } @end ーーーーーーー main.m ーーーーーーー #import <stdio.h> #import "Data.h" int main(void) { Data* data = [[Data alloc] init]; [data setStr:@"aaa"]; NSLog(@"%@",[data retStr]); return 0; } 例2)次に、プロパテイを使って例1を書き換えてみました。 ーーーーーーー data.h ーーーーーーー #import <Foundation/NSObject.h> #import <Foundation/NSString.h> @interface Data : NSObject { NSString* str; } @property (retain) NSString* str; @end ーーーーーーー data.m ーーーーーーー #import "Data.h" @implementation Data @synthesize str; @end ーーーーーーー main.m ーーーーーーー #import <stdio.h> #import "Data.h" int main(void) { Data* test = [[Data alloc] init]; test.str = @"hoge"; NSLog(@"%@",test.str); return 0; } 例2を実行した結果、以下のように出力されました。 2010-02-05 22:17:50.696 data[1583:903] *** __NSAutoreleaseNoPool(): Object 0x100001068 of class NSCFString autoreleased with no pool in place - just leaking 2010-02-05 22:17:50.698 data[1583:903] hoge @propertyのオプションを(retain) ではなく、(assign)に変更すると、 2010-02-05 22:30:02.271 data[1619:903] hoge と出力されて、期待した結果が得られるのですが、なぜretainではダメなのでしょう? また、assignでも例1のようなメモリ管理は自動的に行われているのでしょうか? 以上、ご指導の程、よろしくお願いいたします。

  • Objective-Cでのエラー

    よろしくお願いします。「Xcode5ではじめるObjective-Cプログラミング(大津真著)」という本を購入し、Objective-Cの勉強をはじめました。Objective-Cが初めてのプログラミング初心者です。 本に記載されたコードを入力しているのですが、下記でエラーが出て困っています。 何度も見なおしたのですが本との違いを見つけることができませんでした。 どこがおかしいのかお分かりの方がおられましたらどうか教えて下さい。 ●エラー more '%' conversions than data arguments が、下記の2箇所で出ます。(いずれも生年月日の前の@ に矢印がでています。) >NSLog(@"%@ 生年月日:%@, 身長:%.1fcm"), >NSLog(@"%@ 生年月日:%@, 身長:%.1fcm"), 実行すると Thread 1:EXC_BAD_ACCESS(code=EXC_1386_GPFLT) とでます。 ---------- // main.m #import <Foundation/Foundation.h> #import "Person.h" int main(int argc, const char * argv[]) { @autoreleasepool { Person *personA = [[Person alloc]init]; [personA setName:@"吉田一郎"]; NSDate *dateA = [NSDate dateWithString:@"1979-11-12 00:00:00 +0900"]; [personA setBirthday:dateA]; [personA setHeight:180.5]; NSLog(@"%@ 生年月日:%@, 身長:%.1fcm"), [personA name], [personA birthday], [personA height]; Person *personB = [[Person alloc]init]; [personB setName:@"山田太郎"]; NSDate *dateB = [NSDate dateWithString:@"1981-03-01 00:00:00 +0900"]; [personB setBirthday:dateB]; [personB setHeight:172.3]; NSLog(@"%@ 生年月日:%@, 身長:%.1fcm"), [personB name], [personB birthday], [personB height]; } return 0; } ---------- // Person.h #import <Foundation/Foundation.h> @interface Person : NSObject -(void)setName:(NSString *)name; -(NSString *)name; -(void)setBirthday:(NSDate *)birthday; -(NSDate *)birthday; -(double)height; -(void)setHeight:(double)newValue; @end ---------- // Person.m #import "Person.h" @implementation Person { NSString *_name; NSDate *_birthday; double _height; } -(void)setName:(NSString *)aName { _name = aName; } -(NSString *)name { return _name; } -(void)setBirthday:(NSDate *)aBirthday { _birthday = aBirthday; } -(NSDate *)birthday { return _birthday; } -(void)setHeight:(double)aHeight { _height = aHeight; } -(double)height { return _height; } @end

  • Objective-c 画像処理

    Cについては、全くの素人です。 「Xcodeプログラミング大全」という書籍を参考に、開発を進めているのですが、行き詰まってしまったので、質問させて下さい。 ImageKitを使ったイメージブラウザを作成して、取り込んだ画像を別名で別の場所に保存するプログラムを作成しています。 前半部は文字数の関係で省略します。 ボタンをクリックして画像を保存します。 - (IBAction)myButton:(id)sender; { // imagebrowserに保存した画像を順番に処理 for(int i=0; i< [myImages count]; i++){ NSData *data = nil; NSString *errorDescription; //NSPasteboard *pasteboard = [myImages objectAtIndex:i]; if([[[myImages objectAtIndex:i] types] containsObject:NSFilenamesPboardType]) data = [[myImages objectAtIndex:i] dataForType:NSFilenamesPboardType]; if(data){ NSArray *filenames = [NSPropertyListSerialization propertyListFromData:data mutabilityOption:kCFPropertyListImmutable format:nil errorDescription:&errorDescription]; for(int j=0;j< [filenames count];j++){ //NSLog(@"%@",[filenames objectAtIndex:j]); NSBitmapImageRep* bitmap = [myImages objectAtIndex:i]; // 画像保存 NSData* outdata = [bitmap representationUsingType:NSPNGFileType properties:[NSDictionary dictionary]]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDesktopDirectory, NSUserDomainMask, YES); NSString* path = [NSString stringWithFormat:@"%@/test.png",[paths objectAtIndex:0], nil]; [outdata writeToFile:path atomically:YES]; / } } } } @end エラーは発生しないのですが、コンソールに「[MyImageObject types]: unrecognized selector sent to instance 0xf722590」と表示されます。 また、画像は全く保存されません。 どなたか、ご教授をお願いします。

専門家に質問してみよう