[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 12:16 / Filesize : 248 KB / Number-of Response : 975
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Objective-C [ObjC part:4];



1 名前:デフォルトの名無しさん [2009/04/15(水) 00:11:00 ]
Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
 (Wikipedia:ja.wikipedia.org/wiki/Objective-C より)

Objective-C [ObjC part:3];
ttp://pc12.2ch.net/test/read.cgi/tech/1186543111/

Objective-C
ttp://pc11.2ch.net/test/read.cgi/tech/1106983092/

Objective-C
ttp://pc5.2ch.net/tech/kako/990/990574267.html

2 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 00:11:50 ]
*** プログラム技術板 ***
【マック】Macintoshプログラミング質問箱
ttp://pc11.2ch.net/test/read.cgi/tech/1113058054/

Mac OS Xでの開発環境はどれがイイ?
ttp://pc11.2ch.net/test/read.cgi/tech/1163314891/

*** 新・mac板 ***
Cocoaはさっぱり!!! version.12
ttp://pc11.2ch.net/test/read.cgi/mac/1231853172/

Macでプログラミング{9}
ttp://pc11.2ch.net/test/read.cgi/mac/1216824430/

Xcode part7
ttp://pc11.2ch.net/test/read.cgi/mac/1218774554/

iPod touch/iPhone ネイティブアプリ製作 ver.10
ttp://pc11.2ch.net/test/read.cgi/mac/1238385226/



3 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 00:12:29 ]

*** 本家 ***
Objective-C 2.0 プログラミング言語
ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/ObjectiveC/

Introduction to The Objective-C 2.0 Programming Language
ttp://developer.apple.com/documentation/Cocoa/Conceptual/ObjectiveC/Introduction/introObjectiveC.html

そのほか英語
ttp://developer.apple.com/documentation/Cocoa/ObjectiveCLanguage-date.html

*** 書籍 ***
荻原本
ttp://www.amazon.co.jp/%E8%A9%B3%E8%A7%A3-Objective-C-2-0-%E8%8D%BB%E5%8E%9F-%E5%89%9B%E5%BF%97/dp/4797346809/ref=sr_1_1?ie=UTF8&s=books&qid=1239721407&sr=1-1

HMDTダイナミック本
ttp://www.amazon.co.jp/Dynamic-Objective-C-%E6%9C%A8%E4%B8%8B-%E8%AA%A0/dp/4861006414/ref=sr_1_11?ie=UTF8&s=books&qid=1239721553&sr=1-11


4 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 00:48:05 ]
乙!でもどうでもいいが アマゾンのリンクは、
ttp://www.amazon.com/dp/数字 だけでいいんで、
来年ぐらいに次にスレたてする人はよろしく。
荻原本
www.amazon.co.jp/dp/4797346809
HMDT ダイナミック本
www.amazon.co.jp/dp/4861006414

ダイナミック Objective-C サイト
journal.mycom.co.jp/column/objc/

Apple のランタイムのソースコード (10.5.6)
www.opensource.apple.com/darwinsource/10.5.6/objc4-371.2/

英語のサイトだけど
Objective-C 入門
cocoadevcentral.com/d/learn_objectivec/
Objective-C Style 1, 2 (変数名のつけかた等)
cocoadevcentral.com/articles/000082.php
cocoadevcentral.com/articles/000083.php
Mike Ash さん(Audio Hijack の中の人)のブログ、
Obj-C のランタイムの話が良く出る
mikeash.com/?page=pyblog/
C++ と Objective-C の文法の比較
ktd.club.fr/programmation/objective-c.php

5 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 14:26:33 ]
ハムスターの Obj-C 講座もおもろい。偶然きのう更新されてた。
www.sealiesoftware.com/blog/archive/

6 名前:3 mailto:sage [2009/04/15(水) 23:38:19 ]
>>4
>ttp://www.amazon.com/dp/数字 だけでいい

知らんかった。以後そうする

7 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 04:58:57 ]
amazon.jp/dp/4797346809
amazon.jp/dp/4861006414

で良いよ、coもwwwも要らない

8 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 14:02:41 ]
短い URL かっこいい

9 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 18:35:08 ]
じゃもうぜんぶTinyURLで。

10 名前:デフォルトの名無しさん mailto:sage [2009/04/17(金) 21:19:18 ]
あれはかっこわるい



11 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 10:24:27 ]
Cのヘッダファイル#importしたら、idって名前のメンバがある構造体でエラーになった。
これはしょうがないのか…。

12 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 16:10:41 ]
エラーにならんよ。


13 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 18:05:10 ]
#import <objc/objc.h>

14 名前:デフォルトの名無しさん [2009/04/19(日) 22:09:48 ]
Windowsで動く処理系ってありますか?
有ったら触って見たいです。

15 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 22:51:36 ]
これかな...
www.gnu.org/software/gnustep/experience/Windows.html
日本語ではあまり新しい資料はないかもしれん。とりあえず
journal.mycom.co.jp/special/2004/gnu/006.html

16 名前:デフォルトの名無しさん [2009/04/19(日) 23:20:09 ]
>>15
ありがとう御座います><
早速試してみます^^

17 名前:デフォルトの名無しさん mailto:sage [2009/04/19(日) 23:26:10 ]
MinGW/GCCじゃだめ?

18 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 00:43:25 ]
>>17
>>15 のリンク先は MinGW ベース。

他には、Yellow Box for Windows というのを Apple が昔作ってたから、
ebay とかで粘ってると手に入るかもしれません。
www.shawcomputing.net/resources/apple/os_pictures/yb2k/
Rhapsody DR2 もしくは WebObjects 4.5 というのに付いてきます。

19 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 01:23:36 ]
Cocotron は?

20 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 01:32:35 ]
Cocotron は XCode でのクロスコンパイルが前提の気がする...
つかったことなくてサイトの説明を読んだだけなので何とも言えませんが。



21 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 02:27:54 ]
>>20
俺も採用例FileMagnetのWinクライアントぐらいしか知らないな
用途によってはREALBasicとかも検討すべし>>14
ただ遊びたいなら話は別だが

22 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 02:55:55 ]
>>21
>用途によってはREALBasicとかも検討すべし
REALBasic は Objective-C ではないのでは???

23 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 10:30:20 ]
>>22
WIn/Mac両対応のソフトウェアを作るという前提での話
どうももう一回読んでみると>>14はただObjective-Cの処理系で遊びたかっただけのようだから的外れな指摘だな

たしかLinux系にはgccでobjective-cのコンパイラは提供されていたような...
数度インストールオプションで見た覚えがある

24 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 10:42:47 ]
荻原本買って勉強中だけどこれが初プログラムだからどーにもな〜。
やり始めて2週間だからしゃーなか

25 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 15:58:31 ]
初プログラミングなら、荻原本でいきなりObjective-C叩くより、
楽しいCocoa辺りのコードを特に理解せず書いて動かして学んでいく方が進み早いんじゃないかな

26 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 18:59:56 ]
Dynamic-ObjectiveC を勉強中です。IMP 呼び出しについて教えて下さい。
オブジェクトを返すようなメソッドはそのままのものが返ってきましたが、
値を返すようなメソッドの場合、どうやって返ってくるのですか?
@interfae Bar: NSObject { double num; }
@property(readwrite) double num;
@end
@implementation Bar
@synthesize num;
@end
として、Bar のインスタンス hoge を作り、numを適当に設定し、
IMP numImp = [[Bar class] instanceMethodForSelector:@selector(num)];
id num = numImp(hoge, @selector(num));
としたところ、num には hoge が入っていました。method_copyReturnType()
では、d が返ってくるのですが…よろしくお願いします。

27 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 20:16:26 ]
ええと追記です。id だからオブジェクトを返すものしか駄目なのか、とも考えた
のですが、double を試す前にBar の変数に char *name とした場合には、
設定したchar* が返って来たので、やってみた次第です。
int の場合にも設定した値が返ってきました。で、今floatでやってみたのですが、
double と同様、駄目でした。float なら値が返ってくる事を期待したのですが…

28 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 20:48:49 ]
キャストしたらどうよ?

double(*numImp)(id,SEL) = [Bar instanceMethodForSelector:@selector(num)];
double num = (*numImp)(hoge, @selector(num));

29 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 21:06:51 ]
それが正解だよね

IMP の定義は typedef id (*IMP)(id, SEL, ...);
だから、id 以外を返す場合はキャストして使わないといけない。

30 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 21:16:19 ]
>>28
できました!なるほどー、IMPをさらに関数ポインタにしてしまえば良いんですね。
勉強になりました、ありがとうございます。

あと>26の「num には hoge が入っていた」というのはたまたま入っていた
だけのようでしたので訂正します(汗



31 名前:デフォルトの名無しさん mailto:sage [2009/04/20(月) 21:26:59 ]
>>29
ありがとうございます。キャストが必要だろうと思い、そのまま
double value = (double) numImp(hoge, @selector(num));
とかやっていたので、コンパイラに怒られていたんです。Cそのものの経験が
無いのでよく分からずにやってました。関数ポインタのキャスト、ってのが
目から鱗でして (^^;;

32 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 14:35:51 ]
>>25
楽しいCocoa買ってみます
ありがと

33 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 17:11:46 ]
KVC準拠を意識して組んでる人いる?


34 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 22:32:46 ]
普通に書いてればそうならない?

35 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 13:08:57 ]
GUIならバインディング使うだろ
バインディング使うにはKVCで書くだろ

普通に書いてりゃkvcで書くと思う

36 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 13:20:20 ]
>>33 は他の言語からうつってきたばかりで、
つい getter を -(NSHage*)hoge でなくて
-(NSHage*)getHoge とかいてしまうからそう思うんではなかろうか。

37 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 22:17:46 ]
getだったら
- (void)getHoge:(NSHoge *)
とか言う形? 違和感有るけど

38 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 08:08:48 ]
>>37
-(void)getHoge:(NSHoge**)
でないと駄目だとおもう

39 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 01:03:12 ]
Apple gcc で -fconstant-string-class オプションが期待道理動かないんだけどなぜでしょう?
Linux で GNU の runtime 使ってると動くんですが…

#import <objc/Object.h>
#import <stdio.h>
@interface MyString : Object
{
char *bytes;
unsigned int numBytes;
}
- (const char *)cString;
- (unsigned int)length;
@end

@implementation MyString
- (const char *)cString { return bytes; }
- (unsigned int)length { return numBytes; }
@end

int main(int argc, char* argv[]) {
id s = @"Hello, World";
fprintf(stderr, "<%s:%p>\n", [s name], s);
return 0;
}
% gcc -g -fconstant-string-class=MyString -o main main.m -lobjc
main.m: In function ‘main’:
main.m:19: error: cannot find reference tag for class ‘MyString’
make: *** [main] Error 1

40 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 11:04:51 ]
Obj-C 2 だとこんなかんじになります。
#import <Foundation/Foundation.h>
// copied from objc/runtime.h
// because objc_class is opaque in Obj-C 2
struct objc_class_fake {
Class isa;
Class super_class;
const char *name;
long version;
long info;
long instance_size;
struct objc_ivar_list *ivars;
struct objc_method_list **methodLists;
struct objc_cache *cache;
struct objc_protocol_list *protocols;
} ;

@interface MyString : NSObject
{
char *bytes;
unsigned int numBytes;
}
- (const char *)cString;
- (unsigned int)length;
@end

struct objc_class_fake _MyStringClassReference;
つづく



41 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 11:05:37 ]
@implementation MyString
+(void)load
{
memcpy(&_MyStringClassReference,self,sizeof(_MyStringClassReference));
}
- (const char *)cString { return bytes; }
- (unsigned int)length { return numBytes; }
@end

int main(int argc, char* argv[]) {
[[NSAutoreleasePool alloc] init];
id s = @"Hello, World";
fprintf(stderr, "<%s:%s>¥n", [[[s class] description] UTF8String],[s cString]);
return 0;
}


42 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 11:08:43 ]
コンパイルは
gcc -fno-constant-cfstrings -fconstant-string-class=MyString hogehoge.m -framework Foundation
とかしてください。
ポイントは、Apple runtime だと、
1. no-constant-cfstring で CFString の特殊処理をやめさせてやる
2. constant-string-class=HogeString だと、isa ポインタが
struct objc_class _HogeStringClassReference というシンボルを指します。
だからそれを初期化してやらないといけないです。
lists.apple.com/archives/objc-language/2006/Jan/msg00013.html
を参照してください。

43 名前:39 mailto:sage [2009/04/28(火) 12:28:19 ]
>>42
Thx! 試してみます.

44 名前:39 mailto:sage [2009/04/28(火) 18:26:09 ]
#import <objc/Object.h>
#import <stdio.h>
#import <string.h>

#if (defined __APPLE__) && (defined __MACH__)
# import <objc/objc-runtime.h>
struct objc_class _MyStringClassReference;
#endif

@interface MyString : Object {
char *bytes;
unsigned int numBytes;
}
- (const char *)cString;
- (unsigned int)length;
@end

@implementation MyString
#if (defined __APPLE__) && (defined __MACH__)
+ load {
memcpy(&_MyStringClassReference, self, sizeof(_MyStringClassReference));
}
#endif
- (const char *)cString { return bytes; }
- (unsigned int)length { return numBytes; }
@end

int main(int argc, char* argv[]) {
id s = @"Hello, World";
fprintf(stderr, "<%s:%p> : \"%s\"\n", [s name], s, [s cString]);
return 0;
}

45 名前:39 mailto:sage [2009/04/28(火) 18:28:24 ]
Apple % gcc -fno-constant-cfstrings -fconstant-string-class=MyString -o main main.m -lobjc
GNU % gcc -fconstant-string-class=MyString -o main main.m -lobjc
って感じで両方でコンパイル成功して期待した通り動いた.ありがとう >>42

46 名前:デフォルトの名無しさん [2009/05/13(水) 08:16:25 ]
オブジェクト自分で作ったら、リリースせんといかんと思うけど、
そのとき、例えば、AppleのCocoaだと、

NSObject obj = [[NSObject alloc] init];
[obj autorelease];

って出来るよね?
このautoreleaseって、要するにGCみたいなもんなの?

47 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 11:26:33 ]
ちがう。autorelease は NSAutoreleasePool に登録する際に使う。
NSAutoreleasePool は drain/release を受けたときに登録してある
インスタンス全てに release を送るだけ。受けなければそのまま放置。
とりあえず、メモリ管理プログラミングガイドを理解しよう。
ttp://developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html
それでも分からないなら、新Mac板 Cocoaはさっぱりスレ の方へどぞ。
pc11.2ch.net/test/read.cgi/mac/1241407525/


48 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 13:50:54 ]
>>46
C言語の自動変数に近い。イベントループ開始でAutoreleasePoolが確保
されて、autoreleaseにするとそこに登録される。イベントループ終了で
AutoreleasePoolが解放されて、autoreleaseで登録したオブジェクトは
全てreleaseされる。だから自分でreleaseの手間が省ける。
GCはどこからも参照されていないオブジェクトを見つけて勝手に解放する
機能

49 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 20:21:28 ]
メモリ管理プログラミングガイドは日本語版もあるよ
developer.apple.com/jp/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt/MemoryMgmt.html

50 名前:デフォルトの名無しさん mailto:sage [2009/05/13(水) 20:43:38 ]
あ、日本語のはログインしないと見れないのかな、ごめん



51 名前:デフォルトの名無しさん mailto:sage [2009/05/16(土) 23:51:15 ]
Xcode で、Objective-c (*.m)のクラスから 別の C++(*.cpp) ファイルの
グローバル関数を呼ぼうとすると、下記のようなエラーが出てしまいます。

Linking xxx/xxx
-[xxx xxx:] in xxx.o

Objective-Cのクラスから、C++のグローバル関数を呼べなかったようです。
*.m ファイル内に作ったローカル関数は呼べたのだけど・・・



52 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 00:18:26 ]
extern "C"

53 名前:デフォルトの名無しさん mailto:sage [2009/05/17(日) 01:42:10 ]
トン

54 名前:デフォルトの名無しさん [2009/05/29(金) 19:54:09 ]
class Test
{
Test(){}
virtual ~Test(){}
};

これコンパイルすると、
error: expected '=', ',', ';', 'asm' or '__attribute__' before 'Test'
ってエラー出ます
何が悪いんですか?


55 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 20:17:13 ]
うちでは問題無かったよ。セミコロン付けろゴルァって事かな?

% cat foo.cpp
class Test
{
Test(){}
virtual ~Test(){}
};
% g++ -c foo.cpp
% ls foo.o
foo.o

56 名前:デフォルトの名無しさん [2009/06/01(月) 15:46:54 ]
>>55
いろいろ試しましたが、コンパイル通りません…
自分はiPhoneのOpenGL ESベースのアプリでやっているのですが、それがまずいんでしょうか
プロジェクト作成して、Other SourcesフォルダにTest.hを作成して、>>54のコードを記述し、それをmain.mに#importしてるのですが、エラーになります
.mmで定義するようにしないといけないのかなと思い、Test.mmを作成してコンストラクタ・デストラクタの定義をそちらに移してもだめでした

できればコンパイルを通すまでどのような手順で行っているのか教えてください


57 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 16:13:50 ]
before 'Test'
だから、クラス定義に問題があるんじゃなくて、
その前、恐らく includeファイル内などに問題がありそう。


58 名前:デフォルトの名無しさん [2009/06/01(月) 16:33:57 ]
ヘッダーファイルの「情報を見る」とファイルタイプが.h,.cになっていたので、.h.cppに変えました。
が、それでもダメでした。これでいけると思ったんだけどなあ。
この問題ってXcodeスレで聞いた方がいいんですかね?


59 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 17:25:52 ]
呼び出し側のmain.mの「情報を見る」でファイルタイプを.c,.objcから.cpp,.objcppに変えたら動きました。
ここら辺説明してるサイトが全然見あたらなかったですよ…
2chのXcodeスレでかろうじて類似の質問があって助かった


60 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:05:51 ]
System.Generic.List<T>に相当する
記述方式ってないのでしょうか

毎回毎回別々のオブジェクト書くの面倒です
助けてください



61 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:16:13 ]
>>60
NSArray に突っ込んで、型は気にしないというのが Cocoa 流です。
もしくは Objective-C++ にしてSTL の list を使えばいいと思いますが
その場合は retain/release に気をつけてください。

>>59
それはだって Obj-C の問題というよりは、C, C++ では
当然の話だから... いつもはどんな言語で開発してるんですか?
C, C++, Obj-C の .h ファイルは、コンパイルの際に
どの言語からインクルードされるかわからないので、
XCode 等 IDE で設定するにしても .h に言語を設定しても仕方が無いです。
.h に C++ のクラスがあるなら、
インクルードする側を (Obj-)C++ モードにしないと
そりゃあコンパイルが詰まりますよ。

62 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:43:19 ]
>>61
それなんてJavaですかw
iPhoneでもObjective-C++できるのですか

63 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:44:52 ]
C++のテンプレートはオブジェクト指向的じゃないとよく批判されるがな

64 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:46:14 ]
>>62
iPhone でも Obj-C++ できますよ
というか main.m を cpp モードにした時点で Obj-C++ になってます

65 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:52:52 ]
>>59
まさかgccでコンパイルしてたとか?
g++じゃなくて。


66 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:07:28 ]
>>65
そういうことだったんじゃないの。XCode (Mac の IDE) からだと
ファイルの言語設定でコンパイラが変わるので。
まあ確かにそのあたりはやっている人には当たり前すぎて、
解説書にもつい書き忘れてしまう... ということかも知れない

67 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:24:34 ]
GUI以外の部分で
コールバックってどうやって実現すればいいですかね?


68 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:27:45 ]
>>67
それだけで貴女以外のひとがなにが聞きたいかわかると本当におもってますか?
僕らはエスパーじゃないよ。

69 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:29:58 ]
ネットワーク処理をコールバックで処理したいの

70 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:33:15 ]
さっぱり見えてこないんだけど、Objective-Cは関係あるの?



71 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:39:50 ]
>>70
C#とC++ならコールバックあるでしょ
なんでObjective-Cには無いの?

元のソース移植できないじゃん

72 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:51:43 ]
メソッドのポインタ取り出したいってこと?

73 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:03:39 ]
>>71
何で無いと思うの? 無い訳無いじゃん。

74 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:09:42 ]
じゃあこれと等価の記述を教えていただけないですか?

double g( double x, double (*f)(double) )

75 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:11:28 ]
それでいいじゃんw

76 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:21:34 ]
>>67
関数ポインタみたいなのが欲しいんでしょ。

developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/3objc_language_overview/chapter_7_section_6.html

77 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:27:49 ]
基本は>>76で、遅いと思ったらこっち。

journal.mycom.co.jp/column/objc/022/index.html

でもネットワーク処理なら C で kqueue とか libevent とか使ったら良いのに。

78 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 00:32:51 ]
- (double)g:(double)x callback:(double(*)(double))f;

こういう事かな?


79 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 01:01:43 ]
>>71
いや、C++ のソースがあるなら Obj-C++ つかえば
なにひとつ移植しなくて済むでしょ。何を考えているんだ?アホ?

80 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 21:16:49 ]
>>74
それそのまんまで何が問題なんだ?w



81 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:54:09 ]
わかりにくいね

82 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:58:03 ]
typedefすればいいじゃん。

83 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 23:58:09 ]
Obj-Cって型が解らなくなった場合に
チェックする方法ってありますか?

84 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 00:41:19 ]
正確には無いと思うよ。

85 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 01:24:04 ]
>>83
[obj class]

developer.apple.com/DOCUMENTATION/Cocoa/Reference/Foundation/Protocols/NSObject_Protocol/Reference/NSObject.html#//apple_ref/occ/intfm/NSObject/class
wwwa.dcns.ne.jp/~nito/OSPT/ObjcOthers.html

86 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 01:43:55 ]
>>83
その型ってのは、変数の型? それとも、オブジェクトのクラス?
Objective-Cは変数に型がない(idでかまわない)言語なだけですよ(プリミティブ型は除きますが)
型キャストを許す言語であれば、(変数の)型が分からなくなる事はありえるのでは?
変数の型がどうであれ、オブジェクトが自分自身の型/クラス、もしくは受けられるメッセージを知ってれば問題ないって考え方です

87 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 01:51:14 ]
オブジェクトの型が id なんじゃないの?
プリミティブがそれぞれの型を持っているのと同じで。

88 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 04:23:39 ]
>>87
idは構造体のポインタのtypedefだからそうとも言えるけど、それは変数に型のあるCという言語での実装の話しで...なんというか微妙な感じもする。
idには特別意味もないし、JavaとかC++の縛りのきつい「型/クラス」と、idは別の概念、別のくくりにした方がいいんではないかと。

89 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 22:58:35 ]
何なのこの投げっぱなし質問

90 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 00:15:09 ]
interface作ったときにメモリ開放メソッドは
どのように記述するのが一般的なのでしょうか





91 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 02:39:56 ]
@interface ... @end内にデストラクタをどう宣言するかという話かな?
普通はNSObjectで宣言されているdeallocメソッドをオーバーライドします。
(だから@interfaceにはとくに何も書きません。)
メモリ管理については
developer.apple.com/documentation/Cocoa/Conceptual/MemoryMgmt/Articles/mmObjectOwnership.html
をどうぞ。

92 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 20:48:46 ]
独自にObjを定義したとして
[[Obj alloc] initHoge : arg];

allocと組み合わせて利用するinitHogeを定義するとき
定義は以下が一般的なのでしょうか?

- (id) initHoge : (NSString *) val;

93 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 22:03:25 ]
XmlTextWriterみたいなクラスってないですか?

94 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 00:24:29 ]
>>93
Obj-C スレにきて、返事をする人が .NET を知っていると仮定するとはいい度胸をしている。読み手のことを考えて、
「.NET ならこれこれができるこれこれというクラスが
あるんですけど、(ドキュメントは http:// ... に ...)」とか
質問の際に書けんものかね?

とりあえず NSXMLDocument をつかえば規格に準拠した XML データは
つくれますよ。かなりメソッド名が冗長だけど。
手で文字列をつなぎ合わせて XML にするよりは断然いいです。

あと、これ以上は Mac 板の iPhone プログラミングスレか
Cocoa スレに行ったほうがいいとおもいます。ここは一応 Obj-C 言語に特化した
過疎スレなので。


95 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 01:58:33 ]
>>93みたいな手合いは相手する必要ないよ。

96 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:23:27 ]
NSMutableDictionaryにオブジェクトをつっこむときに

NSMutableDictionary *dic = [[NSMutableDictionary alloc] init];
Hoge *hoge = [[Hoge alloc] init];
[dic setObject:hoge forKey:@"hoge"];
とやるのと

[dic setObject:[[Hoge alloc] init] forKey:@"hoge"];
とでは、後者はメモリリークするのでしょうか?


97 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:19:50 ]
何処が違うのかさっぱりわからん


98 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:47:19 ]
>[dic setObject:[[Hoge alloc] init] forKey:@"hoge"];
て書いたら、 setObject:に渡したHogeインスタンスを後でreleaseする手段が無くなるのでは
上の書き方なら [hoge release]て書けるけど。


99 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 02:47:32 ]
>>98
なあにobjectForKey:@"hoge"で取り出してreleaseすればいいさ

100 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 07:22:05 ]
[dic setObject:[[[Hoge alloc] init] autorelease] forKey:@"hoge"];
じゃないとだめ



101 名前:デフォルトの名無しさん [2009/06/10(水) 16:29:35 ]
改行したいときって何を書けばいいんでしょうか?
\nでも\rでもダメだったんですが。


102 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 17:05:39 ]
(option + ¥) n

103 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 18:15:29 ]
>>102
ありがとうございます


104 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:35:38 ]
>>99
それ今の仕様だとメモリリークするけど?

105 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:01:56 ]
>>104
今の仕様って何?
GCのこと?だとしたらGCは仕様じゃなくてオプションだと思うんだが

106 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:07:37 ]
>>105
どっちにしてもコレクションに入れたものを
objectForkeyで取り出して開放してもリークするだろ

107 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:10:47 ]
>>106
意味が分からん、説明して

#import "Hoge.h"
@implementation Hoge
- (void) dealloc
{
NSLog(@"hoge dealloc");
[super dealloc];
}
@end

#import "AppController.h"
#import "Hoge.h"
@implementation AppController
- (void)awakeFromNib {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:[[Hoge alloc] init] forKey:@"hoge"];

Hoge *hoge = [dict objectForKey:@"hoge"];
[hoge release];

NSLog(@"%d", [hoge retainCount]);
// [dict removeObjectForKey:@"hoge"];
[dict release];
}
@end

これでログ出した時点でhogeのretainCountは1でMutableDictionaryに保持されてるだけの状態。
辞書から取り除くか辞書を解放すればHogeはちゃんとdeallocされるんだけど、どこが違うんだ?

108 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:12:36 ]
なんならHoge取り出さずに

- (void)awakeFromNib {
NSMutableDictionary *dict = [[NSMutableDictionary alloc] init];
[dict setObject:[[Hoge alloc] init] forKey:@"hoge"];

[[dict objectForKey:@"hoge"] release];

NSLog(@"%d", [[dict objectForKey:@"hoge"] retainCount]);
[dict release];
}

これでもちゃんとdeallocされるけど?

109 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:14:31 ]
ふーん

110 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:20:05 ]
>>109
ふーん、じゃなくてさ



111 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:25:41 ]
あーそうかい俺が悪かったよ

謝ればいいんだろゴラぁ

112 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:39:43 ]
謝ってないんだけど

113 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 22:43:33 ]
Cocoaが分からないけど興味があるだけの俺みたいなのもいる訳だが、
結局のところ>>107,108が仕様として正しいということでFAですか?

114 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 00:02:52 ]
それ以前に作法として完全に間違っているので気にする必要はありません。
>>99はネタ。

115 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 00:04:42 ]
そもそもNSMutableDictionaryって非推奨のAPIだろ
NSMutableDictionaryに入れるとメモリリークするし

116 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:00:46 ]
>>115
んなわけねーだろ。retain count を勉強し直してこい。

2chで調べ物をしたい時は「教えてください」って書いても
なかなか教えてもらえない。

そういう時は、知ったかぶり風に間違ったことを自信満々に書く。
そうすると、ものすごい勢いでツッコミを入れてもらえる。


コピペ新聞 - 調べ物のコツ
copipe.info/archives/9084

ということですか。

117 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:56:44 ]
>>116
そのメソッド頂いたっ!

118 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 02:29:23 ]
>>114
いやネタっつうか、できるできないで言うならできるという意味で書いた
そりゃ普通こんな書き方はしないけど

119 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 05:54:02 ]
retain/releaseはObjective-Cと関係ないけどなんでここでやってんの?
Cocoaスレでやれば良いのに。

120 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:04:39 ]
OpenStepで規定されてるしここでいいんでねいの。



121 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:34:48 ]
正しい書き方は一体どれなの?


122 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 07:56:37 ]
そういう大事なことはこんなところで断片的な情報をかき集めるより書籍かなにかで
体系だった解説をきちんと読むべきだと思う。
Cocoa周りはアップルが出しているリファレンスがしっかりしてるから>>91
リンク先でも読むといいよ。

123 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 08:42:14 ]
ぶっちゃけOpenStep系以外のObjCフレームワークだってほとんどretain/release採用してるでしょ

124 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 10:23:46 ]
ここで出てるような単純なサンプルならいいけど、
一般にはオブジェクトを入れてから取り出すまでに、別スレッドからdictionaryをいじられて、別のオブジェクトをreleaseしてしまう可能性がある。
まあ作法として避けておくのが無難。

125 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 12:34:39 ]
あんなコード書いてたらどうしようもない馬鹿だと思われることは確実。

126 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 13:14:39 ]
>>96のことな

127 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 14:30:20 ]
>>126
すまん、初心者でよくわからんのだが、
>>96のやり方だと何がまずいのか教えてくれ。

128 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 15:34:59 ]
>96 のその部分だけ見れは、前者だろうが後者だろうがメモリリークする

実は前者はこの後のコードでリリースしてます、とか
オーナーシップとかしらね、後でリリースできれば良いんだよ、
とかって言い出さない限り。

129 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 18:59:21 ]
autoreleaseされたインスタンスを返すfactory methodを作るのが普通の感覚でしょ。
そこに思い至らない時点で実力は推して知るべしだから、GC使うかリークなんて
気にしなくて良いよ。リークが問題になる規模の物はどうせ作れないし、多分他にも
問題山積で誰も気が付かない。

130 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 23:38:40 ]
OS3.0のiPhoneでも
autoreleaseは果てしなく遅いぞ



131 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 00:41:02 ]
iPhoneでGCって性能的にやっぱ厳しいのかな


132 名前:デフォルトの名無しさん mailto:sage [2009/06/13(土) 10:11:29 ]
OS X でも GC は案外リソース喰う気がします
Core Data で GC つかったフリーウェアつくってますが、使っていると
時々 CPU 使用率があがるのは何故かと問い合わせがあって、
しらべてみたら GC がかなり頑張ってるように見えました。

133 名前:デフォルトの名無しさん [2009/06/17(水) 19:24:12 ]
journal.mycom.co.jp/column/objc/019/index.html
こちらの方法で、特定のクラスのメソッド一覧を取得しようとしたのですが、
Objective-C 2.0でobjc_method_list構造体の構造が変わってしまっているようで、このままでは取得できませんでした。
Objective-C 2.0における、objc_method_list構造体もしくはそれに変わる構造体について、知っている方居たらよろしくお願いします。

134 名前:デフォルトの名無しさん mailto:sage [2009/06/17(水) 20:06:24 ]
>>133
class_copyMetodList(Class cls, unsigned int *outCount)

なおその手のものは、Obj-C 2.0 RuntimeAPIに載ってる。
ttp://developer.apple.com/DOCUMENTATION/Cocoa/Reference/ObjCRuntimeRef/Reference/reference.html

135 名前:デフォルトの名無しさん mailto:sage [2009/06/18(木) 01:06:04 ]
>>134
Runtime Referenceがあることを知りませんでした…
ありがとうございます。


136 名前:デフォルトの名無しさん mailto:sage [2009/06/22(月) 21:41:42 ]
OS3.0だとNSOperationQueueにaddしたOperationが2つしか実行されなくなるんだけど実装方法変わったのかな?


137 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 13:27:15 ]
setterが失敗したときって、どういう処理をすべきでしょうか?
1. setterの返り値をBOOLにしてNOを返す。
2. objective-c例外を投げる。

1はsetterの返り値がvoid以外になると、KVCとかでおかしなことにならないか心配。
2は、c++の例外とのすみわけがややこしいので、できればobjective-cの例外は使いたくない。
どうしたもんでしょう。

ライブラリとしては、c++は使わないと割り切ってobjective-cの例外使うべきなのか…

138 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 14:01:29 ]
setterが失敗って?
予期しないオブジェクトが渡されたって事ならObjCの例外を投げるのが普通。

139 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 17:29:31 ]
あとはデリゲートで処理とか?(それも含めてならごめん)

140 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 18:36:08 ]
3. 何もしない
 本当に値がセットされてるかどうか知りたかったら getして比較しろや!

4. exit(3)をコール
 気に食わなければ黙って帰る

5. abort(3)をコール
 そんな話聞いてないです!



141 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 03:26:10 ]
これじゃだめ?
- (void)setHogeHoge:(Hoge *)aHoge error:(NSError **)error;

142 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 04:02:09 ]
>>141
KVCしたいってことだからそれじゃ駄目じゃね?

>>137
1.で問題ないんじゃない?Obj-Cのメッソドディスパッチはそんなにヤワじゃないよ。

143 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 07:10:47 ]
ええかげんなこと書くな。

NSKeyValueCoding Protocol Reference
- (BOOL)validateValue:(id *)ioValue forKey:(NSString *)key error:(NSError **)outError

おまいらまぬある嫁。


144 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 11:52:18 ]
それだとKVCのときだけしか通用しないよね

145 名前:デフォルトの名無しさん mailto:sage [2009/06/27(土) 16:22:38 ]
KVCはNSKeyValueCodingプロトコルですでに定義されてるんだから、
BOOL返したいんなら同等の別のメソッドとして定義すればいいだけじゃん。

KVC準拠のsetterなら戻り値はvoid。
なんとかしたいなら単に例外投げればいい。

146 名前:137 mailto:sage [2009/06/27(土) 22:24:24 ]
んー、validate???: error:か、validateValue:forKey:error:使うのが、
ルールなんですね。
ttp://developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueCoding/Concepts/Validation.html

でも、自動で呼ばれるわけじゃないんで、呼び出し側がvalidateした後にsetするわけですか。
すると、validateとsetの間に他スレッドに割り込まれないようにするためには、
呼び出し側でロックしないといけなくなって、イマイチ。

すると、setterでobjective-cの例外投げたくなるけど、「荻原本」とか、
ttp://google-styleguide.googlecode.com/svn/trunk/objcguide.xml#Avoid_Throwing_Exceptions
見ると、objective-c例外は使うな的なことが書かれてて(両者の理由は違うけど)、悩ましい。


147 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 01:01:34 ]
>>146
Cocoa API 自体が予期せぬ引数を与えられた場合は
頻繁に Obj-C 例外投げるので、
別に自分が投げても大勢に変化ないと思いますが...

148 名前:デフォルトの名無しさん [2009/06/28(日) 15:06:59 ]
ちょっとイニシャライザに関して、質問よろしいですか。
wisdom.sakura.ne.jp/programming/objc/objc7.html
ここのページの指定イニシャライザのサンプルプログラムなんですが

id pt1 = [Point new];
id pt2 = [[Point alloc] initWithPoint:400 int:300];

メイン関数(メソッド)で、pt2にオブジェクトをセットする際に
initが走ってないように思うんですがこれでいいもんなんですか?
[[クラス名 alloc] init]のセットで覚えてきたので、initしなくて
いいのかなっていう疑問なんですが。
※pt1はinitのオーバーライドで[super init]が走ってるからいいとして。

init自体がよく分かってないから、こういう質問してしまってるのかもしれ
ないですが、この方法は正しいのか誤ってるのか、また正しい場合は何故な
のかご教授下さい。

149 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 16:03:34 ]
init〜ではじまるメッセージは内部でinitを呼んでるはずだから大丈夫。

150 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 16:28:17 ]
え?逆じゃね?

NSObject +newは、内部的に[[NSObject alloc] init]と等価。

指定Initializerは他のinitから呼ばれる基本部分を含んだ、共用部分。
この例では、
[Point new]
[Point alloc] init]
はどちらも、内部的にinitWithPointを呼んでいるということ。
もちろん引数は初期値を使っている。この場合は0だろうね。




151 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 20:15:22 ]
>>150
>>148はpt2の初期化のことを聞いてるんじゃね?

ちなみに>>148のコードをXcode 3.1.3(gcc 4.0.1)で試したところ、正しく動作した(ただしそのままだとコンパイルも通らないので、本質的でないところは改変した)。
ただ、このサンプルコードはPointのインスタンス変数を読んでprintfしているだけだから上手く動いたのかもしれん。

[super init]がないことに関しては、>>149の言うとおりなのかもしれんが、そうだとするとメソッド呼び出しが循環するし、そうでないとするとObject部分が初期化されていないということになるから、あまり良い実装ではない気がする。

152 名前:デフォルトの名無しさん [2009/06/28(日) 21:07:22 ]
148です。
>>149様,>>150様,>>151様ご回答ありがとうございます。

結局はpt2ではinitを明示していないので疑問に思ったのです。
>>149様が仰っているように、メソッド名にinit〜をつければinitWithPointで
initが自動的に走る、という考えなら納得いきます。

ただ、詳解Objective-C2.0では、サンプルコードのinitWithMinという
メソッド内で[super init]と明示しているので、メソッド名に
init〜を付けただけではinitが走らないとも判断できます。

まあ・・・[クラス名 alloc] init] の形で覚えておけば問題ない所だと
思うのですが。


153 名前:デフォルトの名無しさん mailto:sage [2009/06/28(日) 22:43:13 ]
>>148のコードは駄目だな。普通はこうだろう。

- (id) init {
return [self initWithPoint:0 int:0];
}

- (id) initWithPoint:(int)x int:(int)y {
if ((self = [super init])) {
self->x = x;
self->y = y;
}
return self;
}

154 名前:150 mailto:sage [2009/06/28(日) 23:08:13 ]
ああ理解した。
リンク先のコード見てなかったが、ひどいコードだったのね。

155 名前:デフォルトの名無しさん [2009/06/28(日) 23:42:37 ]
148です。

>>153様、レスありがとうございます。
やっぱり>>153様のように[super init]で初期化して判定させた方がいいです
よね。ありがとうございました。

156 名前:デフォルトの名無しさん [2009/06/28(日) 23:58:33 ]
ここ読むといいよ
developer.apple.com/jp/documentation/Cocoa/Conceptual/CocoaFundamentals/CocoaObjects/chapter_3_section_6.html#//apple_ref/doc/uid/TP40002974-CH4-SW17

157 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 00:01:34 ]
>>153
> - (id) initWithPoint:(int)x int:(int)y {
> self->x = x;
> self->y = y;

これってどうなの?

158 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 00:07:29 ]
銅ではありません。

159 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 02:14:09 ]
>>148
wisdom.sakura.ne.jp/programming/objc/objc7.html
は情報が古すぎるから初心者は読まないほうがいい

160 名前:150 mailto:sage [2009/06/29(月) 07:49:54 ]
インスタンス変数なんだよね?
意味府。



161 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 08:22:39 ]
148です。やはり、元の情報が古いように感じますね(後に他のページも参照
してみた感想です)。
詳解Objective-C2.0が難しすぎたんで、上記のサイトを参考にしていたんで
すが、誤字脱字が多く、たまにコーディングミスもあったりしてかえって混
乱してしまった、というのが素直な感想です。

余談ですがObjective-cってなんか楽しいですね。感覚的に、ですが。。。

162 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 15:06:09 ]
>>161
ヒレガス本を買うのが一番おすすめ。最新版の日本語訳って出たんだっけ?
英語が読めれば英語版をかうのがよし。
cocoadevcentral.com/
もわかりやすいよ。英語が読めれば。

163 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 17:33:45 ]
ヒレガス本の最新版の和訳は、たのみこむあたりに持ち込むしかないのだろうか…

164 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 20:49:49 ]
またまた148です。>>162様、書籍紹介どうもです。
ヒレガス本調べてみましたが、かなり評判いいみたいですね。
英語は得意ではないですが、読むこと事態に嫌悪感は無いので是非購入してみ
たいと思います。・・・まあ少々お高いのでまた来月にでも。
教えて頂いたサイトも参考にさせて頂きます。さらっと読んでみましたが図が
あって理解し易いですね!

また勉強して戻ってきたいと思います。できればアドバイスする側で!
貴重なお時間を割いて頂き、皆様には感謝致します。

165 名前:デフォルトの名無しさん mailto:sage [2009/06/29(月) 21:33:26 ]
>>164
2ページに1枚はスクリーンショットがあるレベルだ。安心していい。
ナイトライダーについてWiki辺りで調べておくとなおいい。

166 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 00:25:59 ]
>>165
いや、日本人でもナイトライダーしってるだろ...
いまどきの若者はそうでもない?

167 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 11:45:24 ]
はい、マイケル

168 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 07:23:05 ]
>> 164
Safari Books Onlineで立ち読みしてみたら?

169 名前:デフォルトの名無しさん [2009/07/02(木) 21:27:59 ]
fscanfを使いたいのですが、どうしたらいいですか?

170 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 21:38:19 ]
そのまま使えば良いんじゃない?



171 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:34:28 ]
Objective-Cは2次元配列を扱えない糞言語である。

172 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 23:37:59 ]
CとC++は?

173 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 00:12:11 ]
int x = 20, y = 50;
foo[x][y];

何が不満なの?

174 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 00:07:26 ]
放っとけ。

175 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 00:09:45 ]
int hoge[10][10]
こいつをキャストする時って

int(*)[10] get()とかでよかったんだっけ?
C99の仕様と同じ?

176 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 01:04:37 ]
malloc系使わずに
int x = 20, y = 50;
int hoge[y][x];
ってできる?

177 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 01:14:16 ]
>>176
できる。C99。

178 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 16:30:47 ]
ttp://code.google.com/p/plblocks/

179 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 19:27:02 ]
blocks って何じゃいと思ったらレキシカルクロージャの事か

www.mikeash.com/?page=pyblog/friday-qa-2008-12-26.html
landonf.bikemonkey.org/code/iphone/Using_Blocks_1.20090704.html

180 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 00:31:15 ]
>>179
Cocoa を Obj-C で組んでいると block が非常に欲しくなるのは事実なのだが、
C レベルで言語仕様を追加するのはいかがなものかという気もしないでもない



181 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 09:05:12 ]
いつかObjective-C++0xも作られるのかね

182 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 09:10:34 ]
なんで?
いつかって0xということは今年中なわけだけど
そんな情報入ってないぞ

183 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 10:28:56 ]
ていうかObjC++ってObjCを普段CとしてコンパイルしてるところをC++としてコンパイルしてるだけだから
gccがC++0xに対応すればその瞬間にObjC内でもC++0xが使えるわけだが

184 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 11:05:40 ]
>>183

185 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 00:40:41 ]
Objective-CってQueueクラスってないですよね
なんでですか?

186 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 05:29:57 ]
NSMutableArrayでまかなうから。
あんま好きじゃないけど


187 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 07:23:35 ]
>>186
それは性能が激遅になってありえないですね
STLの50分の1しか性能ないのにありえないじゃないですか?

188 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 09:19:59 ]
>>185
Foundationのコレクションて、アプリケーションドメインで必要なものじゃなくて、
APIとのデータ交換に必要なものでしょ。
アプリ内でパフォーマンスを稼ぎたいなら、stlでもboostでも使えばいい。
データ交換には、タプル、配列、ハッシュの三種があれば十分。

189 名前:150 mailto:sage [2009/07/29(水) 23:21:15 ]
こんな記事があった。
>ttp://homepage.mac.com/mkino2/spec/optimize/foundation.html

190 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 23:29:15 ]
自分はCFMutableArrayに構造体のポインタぶちこむだけで
普通に満足なんだけど、STLってそんなに早い?

CFで固めると、void*埋め込めるしオブジェクトのretain/release
すっとばせるし、楽だと思うんだけど。



191 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 23:39:16 ]
間違えた

NSMutableStringを継承したクラスを作りたいのですが
その中で、initWithString:を継承先のクラスに適合させるには
どうやってラップすればいいれしょうか


192 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 00:42:23 ]
{ if(self=[super initWithString:string]){} return self; }

193 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 22:47:45 ]
NSMutableArrayなどのコンテナクラスに
オブジェクトを突っ込んだ後

それを取り出すときに、どうやって型判別するのですか?
たとえばインターフェイスA、B、C、Dのインスタンスをいくつか
追加しているとの想定時、とどのように判断するのがObj-Cだと一般的なのでしょうか?



194 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 23:01:19 ]
isKindOfClass:とか?

195 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 23:11:03 ]
>>194
突っ込むインターフェースが増えた場合に、判定する箇所も増えるため、
バグを生みやすくなる(判定箇所の修正忘れ等)

Obj-Cに限らず、コンテナには、同一クラス、または親(先祖)が同一のクラスに制限しておく方が安全と思われます。

どうしても異なるクラス、親、先祖を入れたいのであれば、
全てのクラスにプロトコルを採用し、共通の操作を行える様にするのが落としどころではないでしょうか?


196 名前:デフォルトの名無しさん mailto:sage [2009/07/30(木) 23:24:39 ]
>>194
そのAPIを単純に1億回実行してみたのですが
全然終わる気がしませんでした。たぶん普通の
用途では使えないと思います。

>>195
なるほど勉強になります。

A、B、Cの祖先をRとして
@interface R : NSObject
...
@end

@interface A : R
...
@end

として操作するのはまぁいいのですが、例えば
入れ子になる。つまりCなんかがNSArrayなどの
サブクラスをインスタンスに持ち、再帰的に呼び出す
場合、どのように扱うのが一般的なのでしょうか。

@interface C : R
{
NSMutableArray *array;
...
}
...
@end



197 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 07:57:30 ]
一億回呼ぶのが普通という基準がよくわからん

198 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 08:03:16 ]
チェックが上手くできず無限ループに入ったって言いたいとか?

199 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 11:32:36 ]
>>193を読んで初心者だと思い安易な回答をしてしまった俺が悪かったよ

200 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:21:19 ]
>>196
Objective-C に限らない話だとおもうが、
コレクションから A, B, C を取り出すループを書いて、 (全部 R のサブクラス)
そのなかであからさまに C の場合だけ違う処理をさせるというのは
良くないです。
コレクションから取り出すループ内で
クラスが C の場合だけ再帰的にしたい、というのは、
カプセル化に反します。

isKindOfClass: とか、
C++ なら dynamic_cast は最後の手段なので、
使いたくなったら反省すべきです。

ループ内ですべき仕事は R のメソッドにしておいて、
for(R* r in array){
[r doSomething];
}
として、C での doSomething の実装内で NSMutableArray*array の内部の
操作をするのがよい。





201 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 12:28:44 ]
>>196
再帰的なら、こういう事?

@interface A:R {…} @end
@interface C:R { NSArray *arrayC; }
- (NSArray *) anUniqueSelector; // セレクタ名を共通に。再帰探索対象を返す
@end
@interface D:NSObject { NSArray *arrayD; }
- (NSArray *) anUniqueSelector; // 必要なら、Rの子クラスチェックも可能
@end

@implementation NSArray (recursive)
- (id) recursiveOp {
 for (id obj in self) {
  if ([obj respondToSelector: @selector(anUniqueSeleclor)])
   [self recursiveOp: [obj anUniqueSelector]]; //注:相互参照で無限ループ
  else if ([obj isKindOfClass:[R class]]) {…}
  …
}

202 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 13:57:52 ]
>>200
Obj-C触り始めて間もないのかな?isKindOfClass: は全く、全然、断じて、1_も、
最後の手段ではない。むしろ型判定の、最初の手段といっても過言ではない。
NSString などのクラスクラスタは、isMemberOfClass: では正しく判定できない。
NSString *hoge = @"~/Documents";
NSString *piyo = [hoge stringByExpandingTildeInPath];
[hoge isMemberOfClass:[NSString class]]; // NO, hoge: NSCFString class
[hoge isKindOfClass:[NSString class]]; // YES
[piyo isKindOfClass:[hoge class]]; // NO, piyo: NSPathStore2 class
KVO では、-(Class) class さえ監視状態によって入れ替えるんだし。
Obj-Cにおいて、isKindOfClass: respondToSelector: object_getClass() 、
何を使おうとも、「正しい」型判定は現状で不可能。NSArray/MutableArray
などは、実際に要素を追加/削除して例外発生させない限り、判定できない。

203 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 14:45:42 ]
この場合は型判定を使うのが間違いだといってんだろうよ

204 名前:デフォルトの名無しさん mailto:sage [2009/07/31(金) 19:43:44 ]
呼び出す側で判定して分岐するより、呼び出される側に共通のプロトコルを採用してポリモーフィズム

205 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 00:17:53 ]
型判定が最後の手段だというのは極端かもしれないけど、
それにべったり依存して型判定だらけになったプログラムも
オブジェクト指向らしくないと思う。
まずは>>200,204のアプローチで設計し、
どうしようもない時だけ型判定で逃げるのが正道では。

206 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 01:31:27 ]
>>202
>Obj-C触り始めて間もないのかな?isKindOfClass: は全く、全然、断じて、1_も、
>最後の手段ではない。むしろ型判定の、最初の手段といっても過言ではない。


207 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 02:53:12 ]
ObjC的なオブジェクト指向の思想ではrespondsToSelector:使うのが自然のように思える。


208 名前:196 mailto:sage [2009/08/01(土) 13:22:20 ]
>>200
では、基底クラスを設けないで@protocolで
doSomthingを定義し、それを実行するのは
Obj-C的にはどうでしょうか?


>>201
そのようなコードを書いて、これ気持ち悪いコードだと思ったので
ここで質問させてもらいました。

>>207
respondsToSelectorって頻繁に呼び出してもいいものでしょうか?
例えばRSSを解析するなどの用途で何度も何度も呼び出すと
いいのだろうかと疑問に思うのですが



209 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 15:32:22 ]
>>208
なんで RSS 処理で respondsToSelector とかの高等手段が必要なのか
わからないんですが、どういう処理を書こうとしてるのか教えてください。

あと、respondsToSelector を頻繁に呼び出して良いか、ですが、
人によって「頻繁」の定義が違うので難しいです。
あなたのばあいは一億回とか平然と言うひとなので
頻繁に呼び出しちゃだめです。
最近はパソコン速いので100回や1000回ぐらいどうってことないです。

あと、スピードが気になったら Instrument 等でスピードを実測して、
プログラムのどこの部分で実際に時間がかかっているかチェックしましょう。
自分の勝手な思い込みで、実際には時間がかかってないところを
最適化してもしかたがないので。


210 名前:デフォルトの名無しさん mailto:sage [2009/08/01(土) 15:36:01 ]
>では、基底クラスを設けないで@protocolで
>doSomthingを定義し、それを実行するのは
>Obj-C的にはどうでしょうか?
別に基底クラスをつくるのと変わらないです。
R* x のかわりに id<R> x になるだけです。



211 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 16:06:51 ]
Tiger環境なんだけどインタフェースビルダーが旧式だと知って絶望した…
豹買ってもいいけどもうすぐ雪豹でるし…
でもそうしたら休暇が終わっちまう!

212 名前:デフォルトの名無しさん mailto:sage [2009/08/11(火) 18:12:36 ]
情報の豊富な彪で覚えるまで雪豹は暫く放置で良いじゃん。

213 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 16:47:25 ]
Objective-Cって継承でmethodをoverrideしたあとに更にそれを継承してもう一回overrideした場合、superで呼び出すと最終override以外のすべてが呼び出されるもんなの?
sample
#import <Foundation/NSObject.h>
#import <stdio.h>

@interface A: NSObject
- (void)method1;
- (void)method2;
@end

@implementation A
- (void)method1 { printf("method1 of Class A\n"); }
- (void)method2 { printf("method2 of Class A\n"); }
@end

@interface B: A
- (void)method2;
@end

@implementation B
- (void)method2 {
printf("method2 of Class B\n");
printf("self --> ");
[self method1];
printf("super--> ");
[super method2];
}
@end

214 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 16:48:40 ]
@interface C: B
- (void)method1;
- (void)method2;

@end

@implementation C
- (void)method1 { printf("method1 of Class C\n"); }
- (void)method2 {
printf("method2 of Class C\n");
printf("self --> ");
[self method1];
printf("super--> ");
[super method2];
}

@end

int main(void)
{
id x = [[B alloc] init];
id y = [[C alloc] init];
printf("--- instance of B ---\n");
[x method1];
[x method2];
printf("--- instance of C ---\n");
[y method1];
[y method2];
return 0;
}

215 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 16:49:59 ]
結果
--- instance of B ---
method1 of Class A
method2 of Class B
self --> method1 of Class A
super--> method2 of Class A
--- instance of C ---
method1 of Class C
method2 of Class C
self --> method1 of Class C
super--> method2 of Class B
self --> method1 of Class C
super--> method2 of Class A

216 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 17:01:01 ]
あ、勘違いしていました。
CのsuperであるBのmethod2で更にsuperであるAを呼び出していました。
継承でoverrideを繰り返してもsuperで呼び出せるのはその一つ前でいいんですよね。

217 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 17:04:27 ]
>>216
そうだよ。

218 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 00:30:27 ]
>>213
本題と関係ないが、
#import <Foundation/NSObject.h>
とわざわざ細かく指定するとかえってコンパイルが遅くなりかねないよ。
プリコンパイルドヘッダが使えなくなるので。
#import <Foundation/Foundation.h>
にしておきましょう。

あと printf じゃなくて NSLog(@"hogehoge") をつかうのが一般的じゃないかな。

219 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 19:15:23 ]
>>218
萩原Obj-C(1.0のやつ)をはじめたばかりで、本のサンプルみながらやっているもので。
NSLogは索引をみると後半で出てきますが、まだそこまで到達していないです。(今Ch04あたり)
本当は今ならObj-C 2.0をやるべきなのでしょうけれど、実行環境がまだTigerなので1.0でないとたぶん本のサンプルが動かないと思うので1.0の本を使っています。

220 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 01:05:12 ]
>>219
なるほど。まあ日進月歩の世界で本はすぐに古くなるけど、がんばってね!



221 名前:sage [2009/08/16(日) 08:09:19 ]
>>218
シンプルにコンソールに出力するならprintfでいいと思うけど。
GUIなアプリケーションの動作ログという意味なら、NSLogだが。

222 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 15:51:21 ]
正直どっちでもいいけど、
%@ を後々使うかも、と考えると
最初からNSLogにしておいた方がいいかなって思う。

223 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 15:58:09 ]
時間がコンソールに出力されるのが邪魔な時はprintfだけど、大体はNSLogかな

224 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 17:15:58 ]
Obj-Cとは直接関係はないかもしれないけれど、
荻原本1.0で関数やメッセージ送信の実行速度を求めるサンプルプログラムで
出て来るターミナルのtimeコマンドの結果が違うので教えてください。
荻原本ではtimeコマンドを実行すると
0.990u 0.040s 0:01.04 99% 0+0k 0+1io 0pf+0w
というふうにかえって来て、0.990uがCPUの時間らしいのですが、
実際にTiger(10.4.11)で実行すると
real 0m0.055s
user 0m0.028s
sys 0m0.008s
と、かえって来てしまい、どれがCPU時間か分かりません。

225 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 18:28:03 ]
u=user
s=sys

226 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 19:21:53 ]
つまり見やすくなったんだね

227 名前:デフォルトの名無しさん mailto:sage [2009/08/24(月) 20:30:49 ]
>>225
thx
これで実行時間の比較が出来ます。

228 名前:デフォルトの名無しさん [2009/08/27(木) 12:18:22 ]
クラス変数のような振る舞い試してるのですが
static NSString *value = [NSString stringWithString:@"hoge"];
@interface A2 : NSObject
+ (void) value: (NSString *) val;
- (void) printMessage;
@end

valueの宣言のところで
error: initializer element is not constant
というエラーが出ます。
static NSString *value = @"hoge";
static int value = 1;
この二つは期待通り動きました。
staicな変数の初期化って定数?じゃないとできないとかですか?全インスタンスに共通なオブジェクトを持たせるにはどうすればいいのでしょうか?

229 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 12:27:20 ]
Cでは定数じゃないと初期化できないはず。
最初に使うときに初期化すりゃいいんじゃね?

230 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 12:32:14 ]
クラス変数をその方法で持たせることは出来る。
このクラス変数はnullで初期化しておいて、
最初のインスタンス生成(init)のときにnullかどうかみて
初期化するのが普通かな。





231 名前:228 [2009/08/27(木) 12:37:36 ]
いろいろいじってて違うのペーストしたみたいです。初期化のところは
static NSString *value = [[NSString alloc] init];
でした。

すいません。お願いします

232 名前:228 [2009/08/27(木) 12:39:27 ]
>>229,230
あ、そうか
initilizeでしたっけ?あれで初期化すればいいんですね
ありがとうございます


233 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 14:24:36 ]
+initializeな。

234 名前:デフォルトの名無しさん [2009/09/02(水) 17:44:00 ]
あるクラスのメッセージの中で(strはメンバ変数)
- (void) doSomethig{
NSLog(@"count %d", [str retainCount]);
[str release];
NSLog(@"count %d", [str retainCount] );
}
最初のログで2だと二番目で1になるのは問題ないのですが最初で1の時に2番目でもメッセージが送れて1が帰るのですがどうしてでしょうか?retainCountが1のオブジェクトにreleaseを送信後メッセージを送るとランタイムエラーになるんじゃなかったでしたっけ?

235 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 17:57:49 ]
retainCount の値なんか気にしているやつはアホです

236 名前:234 [2009/09/02(水) 18:00:27 ]
すいません、上と同じことだと思うのですが
int main(){
NSObject *obj = [[NSMutableString alloc] init];
NSLog(@"count = %d", [obj retainCount]);
[obj retain];
NSLog(@"count = %d", [obj retainCount]);
[obj release];
NSLog(@"count = %d", [obj retainCount]);
[obj release];
NSLog(@"count = %d", [obj retainCount]);
return 0;
}
これも0にならないですね。NSObjectにすると0になって最後のログでエラーが出ます。これはどうしてでしょうか?お願いします。

237 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 18:36:47 ]
プールはどこにある

238 名前:234 [2009/09/02(水) 19:04:07 ]
>>237
ありがとうございます。

プール?

retainCountはNSObjectのメンバ変数で
allocでインスタンス作った時は関係ないんですよね?

つまり自分自身にどれだけ参照されてるかの数を持っていて
releaseが呼ばれて0になったときdeallocが呼ばれると。

プールが関係あるのはautoreleaseを自分でした時とそれを呼び出してるような
コンストラクタを呼び出したときですよね?

もしかしてなんか間違って勉強進めてます?

239 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 19:21:05 ]
dealloc された object (のアドレス)に retainCount を送ったところで、
まともな結果が戻ってるわけがない。

> retainCountが1のオブジェクトにreleaseを送信後メッセージを送るとランタイムエラーになるんじゃなかったでしたっけ?

そんな仕様はない。

240 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 20:41:49 ]
>>236
最後のNSLogで存在しない(解放済み)オブジェクトにメッセージを送っているからエラーが出る。



241 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 20:44:55 ]
retainCountなんてメンバ変数は存在しないし
NSMutableStringはtoll free bridgeになってるから実体はCFMutableStringでしょ。

242 名前:234 [2009/09/02(水) 21:22:08 ]
>>239
236をNSObjectでやると
objc[2322]: FREED(id): message retainCount sent to freed object=0x103460
Illegal instruction
というエラーがおきます。NSMutableStringでやるとobjectがないはずのところで1が返ります。これは特に決まった動き(NSMutableStringだからとか)ではなく何がおこるかわからないということなんでしょうか?

>>240
質問がおかしかったですね。すいません。エラーが起きないのはなんででしょうか?と聞きたかったのです。

>>241
retainCountはメソッドでしたね。たしか_rcとかいうメンバだったような。
「NSMutableStringはtoll free bridgeになってるから実体はCFMutableString」というのはわかるのですが、ないはずのobjectにメッセージが送れてしまうのかとおもったのです。

243 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:29:30 ]
MacsBugみたいなアセンブリレベルでできるデバッガってしらない?
実行中のコードをデバッグできるやつ。

244 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:32:41 ]
TMON

245 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:59:37 ]
TMONが見つからない。
どこにいけばある?

246 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 23:24:56 ]
遠い昔・・・

247 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 23:55:39 ]
そんな
少年の日の心の中にいた青春の幻影
では困るのだけど。

248 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 10:07:49 ]
>>243
マルチ乙

249 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 12:08:37 ]
>>242
[[クラス alloc] init] の結果は retain count が 1 であるとは決まってません。
既に存在するオブジェクトが使い回されることもよくあります。
[NSNumber alloc] initWithInt:1] を何回も呼んで NSNumber をつくったとして、
毎回違うオブジェクトを作る必要は全くないでしょ?
だから二回目以降は単にすでにある object をどっかからとってきて、
単に retain して返しているだけかもしれません。

NSString の場合は理由が違って、alloc] init] の段階では
class cluster の中のどのクラスが実際に使われるかきまってないので、
NSPlaceholderString というのの唯一のインスタンスが使い回されてるんです。

とにかくそんなことを気にせずに、retain / release をきちんとしていたら
問題はないようになってます。

250 名前:242 mailto:sage [2009/09/05(土) 21:30:20 ]
>>249
レスありがとうございます

クラスクラスターまでまだ行ってないのですが、NSStringの説明でその言葉は見たことがあったので、なんかそれが関係してるのかな、と思ってました。

とりあえず、先へ進もうと思います。



251 名前:196 mailto:sage [2009/09/06(日) 22:10:26 ]
Obj-Cって
継承階層増えるだけでどれくらい
オーバーヘッドあるのですか?


252 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 23:16:09 ]
2cmくらい。

253 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 10:47:39 ]
それはひょっとしてギャグで言ってるのか

254 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 13:05:58 ]
>>251
ランタイムの実装次第じゃない?

255 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:50:03 ]
>>251
計測してみたら?

256 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 17:48:11 ]
>>242
>質問がおかしかったですね。すいません。エラーが起きないのはなんででしょうか?と聞きたかったのです。

とても基本的なことなので覚えておくべきなのですが、
C、 C++、 Objective-C などの言語では解放済みのメモリ領域や
オブジェクトに対する操作の結果は決められていません。
そもそも「エラーが起きる」という決まりがないのです。

(処理系によってはデバッグ用のライブラリでは解放後のメモリを
変な数値で埋めるなどして、解放済みのオブジェクトへの操作で
エラーが出やすいようにしてくれるような機能もあります)

257 名前:デフォルトの名無しさん [2009/09/10(木) 12:56:51 ]
わけあってCとObjCの混在したプログラムを書いているのですが

@interface CHoge : NSObject{ void (*_ptr)(); }
// _ptrのアクセサを書きたい
@end

このインスタンス変数を読み書きするためのアクセサをどうやって書けばよいかわかりません。
わかる方教えていただけますでしょうか?

258 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 14:01:44 ]
- (void)_ptr{ //関数取得
return (*_ptr)();
}
- (void)set_ptr:(void)(*hoge)() //関数セット
{
void _ptr = hoge
}
じゃ駄目なの?

259 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 14:02:43 ]
ごめん、最後のvoidいらないや。

260 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:50:31 ]
>>257
@interface CHoge : NSObject{ void (*_ptr)(); }
@property (nonatmic, assign) void (*ptr)();
@end

と宣言しといて, @synthesize ptr=_ptr; で生成してもらうか、

- (void (*)())ptr {
 return _ptr;
}

- (void)setPtr:(void(*)())ptr {
 _ptr = ptr;
}
などと自前で書く。



261 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 19:31:49 ]
萩原1.0のコードを本見てコメントまで正確に打ち込んでいたら
warning: multi-line comment
に嵌った・・・
能で改行するなよぅ。

262 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 23:27:19 ]
知らんがな

263 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 00:46:33 ]
charからNSStringに簡単に変換する方法はないでしょうか?

264 名前:デフォルトの名無しさん [2009/09/12(土) 01:02:59 ]
すみません。情報が少なすぎました。

char buf[1024];
で用意したバッファにreadで文字を読み込みます。
その後、NSStringのプロパティを持つやつに
label.text = @"buf";
のように受け取った文字をNSStringに変換して代入したいと考えてます。

今のところ、
NSString *str = [[NSString alloc] initWithUTF8String:szStr];
label.text = str;
[str release];

のようにやっているのですが、2回目以降はうまく代入できません。

265 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 01:21:14 ]
「うまく代入できません」
↑ダメな質問の例

266 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 01:45:07 ]
>>264
デバッガを使えるようになりましょう。

267 名前:264 mailto:sage [2009/09/12(土) 03:11:05 ]
すみません、根本的に何かが違ったようです。
出直してきます。。。

268 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 11:11:44 ]
デバッガの使い方ってアップルからドキュメント出てますか?

269 名前:デフォルトの名無しさん mailto:sage [2009/09/12(土) 15:53:36 ]
>>268
>デバッガの使い方ってアップルからドキュメント出てますか?
Xcodexのドキュメントに乗ってないか? どこにでもあるようなデバッガ
だから、マニュアルなしでも使えるぞ。


270 名前:デフォルトの名無しさん [2009/09/15(火) 01:26:27 ]
>>264
label.text = str;
のあとにstr releaseすると、label.textもreleaseされちゃわないか?



271 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 03:17:02 ]
プロパティのsetter semanticsがassign(デフォルト)だとそうなんのかね?

272 名前:デフォルトの名無しさん mailto:Sage [2009/09/15(火) 13:27:10 ]
NSString をプロパティにするときは copy にしなきゃダメだろ、常識的に考えて。

273 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 14:23:09 ]
どういう常識?

274 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 14:53:09 ]
NSMutableString が渡されたときに外部で書き換えられたらこまるから、GC使ってるときでもcopyにしておいたほうがいい、場合もあるかもしんない。

275 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 16:57:11 ]
NSArrayだとどうするんだろう?
自力DeepCopy?

276 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 17:10:05 ]
そこは状況に応じてだろJK
参照を保持させたいのか、それともインスタンスを複製して保持させたいのか、だろ?

277 名前:275 mailto:sage [2009/09/15(火) 18:31:34 ]
>>272
これに対してだけど?

278 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 19:32:51 ]
>>277
そこは状況に応じて、だろ。

279 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 20:42:03 ]
>>264
get、setメソッドを使わないと、=だとオブジェクトの参照が
代入されるだけだからなぁ。
そりゃ、[str release];は実質、[label.text release];と同じになるだろうな

280 名前:デフォルトの名無しさん [2009/09/15(火) 20:53:02 ]
Cocoaのautorelease poolの解放タイミングがいまいちわからない
それとも、もうGC導入されて、あんま使ってない?



281 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 22:40:53 ]
>>280
自分で明示的にpool作ってないんならイベントループ終了時にそのループ内でのプールが解放される

282 名前:デフォルトの名無しさん [2009/09/15(火) 22:49:35 ]
>>281
そう!まさに、そのイベントループとやらがようわからんのです。。。

283 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:16:51 ]
>>279
>get、setメソッドを使わないと、=だとオブジェクトの参照が
>代入されるだけだからなぁ。

昔はそうだったっけ

284 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:22:29 ]
>>283
えっ、いまはちがいまするか?

285 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:25:23 ]
>>284
Objective-C 2.0 以降しか知らないけど、
obj.prop = hoge は [obj setProp:hoge] と同義。

286 名前:デフォルトの名無しさん mailto:sage [2009/09/15(火) 23:48:58 ]
>>285
へー、そうなんだ。
勉強になった。
ただ、知らないと、逆に参照渡ししたいときとかハマったりしそう。。
それとも、プロパティの時に限って、=がアクセッサメソッド呼び出し
で実装してくれるのかな?

287 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:12:06 ]
プロパティでドット構文使った時だけだよ
てかなんでみんなCocoaスレでやらないのw

288 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:14:30 ]
@selector(func_name)って、Cでいう関数ポインタと同じようなもん?
(これもCocoaスレでやる話?w)

289 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:47:07 ]
>>286
いやいやそうじゃなくて、そもそもクラスCにインスタンス変数x があったときに
C* c=...
c.x=
は(xがプロパティでなければ)文法エラーだから。cはポインタだから、やるにしても
c->x=
でしょ。曖昧さはないです。

290 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 00:54:45 ]
>>289
なるほど。
確かにObjective-Cのクラスのメンバにはc.xみたいにはアクセス
できないよねprivateメンバじゃなくても
c->xになる。

で、ごめん、質問なんだけど、プロパティって何だっけ?w



291 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 09:42:48 ]
>>290
ttp://e-words.jp/w/E38397E383ADE38391E38386E382A3.html

質問の内容が低レベルすぎる

292 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 09:56:37 ]
>>288
ttp://journal.mycom.co.jp/column/objc/018/index.html

293 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 14:53:14 ]
>>288
C でいう関数ポインタは特定の関数の実装を直接指示するでそ(実体はアドレスだし)。
C++ のメンバ関数ポインタは、特定のクラス(とその派生クラス)のオブジェクトの仮想あるいは
そうでない関数を間接的にあるいは直接に指示するでそ(実体はvtbl上のオフセットまたはアドレス)。

Objective-C のセレクタは、どのようなクラスあるいはインスタンスのメソッドでも名前で指示する
ことができる(実体は文字列)。

294 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 20:03:40 ]
>>291
ggrksって感じですまんかった。
んで、プロパティって、つまりはメンバ変数のことだとおもうけど、
そうするとc.xのようにドットで表すのは間違いじゃねって思ったんだけど
それは間違い?
>>289が納得できない

295 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 20:18:25 ]
まちがい。

296 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 20:26:24 ]
>>294
Obj-CのプロパティはC++のメンバ変数じゃないから . で表しても全く問題ない。
最近の言語では当たり前の糖衣構文。C# も同様のシンタックスシュガーを持つ。

とはいえ、foo の bar プロパティが構造体だったとき、foo.bar.baz = 100 で
foo.bar.baz が 100 にならないのはみっともないのは確か。

297 名前:デフォルトの名無しさん mailto:sage [2009/09/16(水) 21:26:55 ]
>>296
始めたばかりの頃コレでハマったのはいい思い出。

298 名前:デフォルトの名無しさん [2009/09/17(木) 02:58:22 ]
質問です。

NSDate *now = [NSDate date];
self.lbl.text = [now descriptionWithCalendarFormat:@"%H:%M:%S" timeZone:nil locale:nil];

で、時間を表示させているのですが、この2行目の部分で

warning: 'NSDate' may not respond to '-descriptionWithCalendarFormat:timeZone:locale:'
(Messages without a matching method signature will be assumed to return 'id' and accept '...' as arguments.)

という警告が出るのですが、これはどういう事なのでしょうか?

299 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 04:05:43 ]
iPhoneでは-descriptionWithCalendarFormat:timeZone:locale: は梨になった。
NSDateFormatterを使いましょう。Mac側でもやめる気満々なことが書いてあるので
できれば移行していった方がよいようだ。

300 名前:デフォルトの名無しさん [2009/09/17(木) 10:57:56 ]
>>299
そうでしたか。ありがとうございます!
おかげさまで警告なしでビルドできるようになりました。



301 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 01:09:24 ]
またもしかするとiPhoneでは無しになったものかもしれないのですが、
NSHost *host = [NSHost hostWithAddress:@"192.168.0.125"];
の部分で、+hostWithAddreassメソッドが見つからないという警告が出てしまいます。
Mac OSX Reference Libraryを参照しながら作ってるので、見つからないはずはないのですが、
iPhoneで実装するとしたら変わりに何を使えばいのでしょうか・・・。

というか、変わりとなるクラスやメソッドってどうやって調べればいいのでしょうか・・・

302 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 09:01:51 ]
alloc] initWithAdress:

303 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:30:44 ]
>>302
それもダメなようです・・・。

304 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 18:57:40 ]
>>301
綴りミス?
+hostWithAddre[a]ssメソッドが見つからないという警告が出てしまいます

305 名前:デフォルトの名無しさん [2009/09/18(金) 19:03:45 ]
>>304
綴りミスです。ごめんなさい。
プログラムの方はちゃんと書いてあります。

警告あっても、正常に動作はするのですが、警告があるままやるのは気持ち悪いですね・・・

306 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:16:43 ]
メソッド廃止になったのに使うのは間違い
警告に添え

307 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:19:51 ]
>>306
で、deprecatedでない代替メソッドはなんなの?

308 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:24:25 ]
教えてあげないよ!

309 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 19:25:59 ]
301≠307ですよ

310 名前:デフォルトの名無しさん mailto:sage [2009/09/18(金) 21:57:57 ]
>>301
CFHostCreateWithName()



311 名前:デフォルトの名無しさん [2009/09/19(土) 08:50:39 ]
久しぶりにCocoaで遊んじゃお!!わくわく

312 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:52:04 ]
連休だもんな!

313 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 08:58:08 ]
そうだな!
さて、なに作ろうw

314 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 10:00:00 ]
連休を有意義に過ごすための予定表アプリを作って連休をつぶすのはどうじゃろか

315 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 15:33:51 ]
来年のGW用ですね。

316 名前:デフォルトの名無しさん [2009/09/20(日) 22:47:54 ]
NSString *message = [NSString stringWithUTF8String:[messageData bytes]];
NSLog(@"%@", message);
[message release];

とある関数の中にこういうコードがあるのですが、
2回目呼び出した時に、メモリ関係のエラーか何かが出てしまいます。
この記述って何か間違ってるのでしょうか?

317 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:50:45 ]
取り敢えずreleaseすんな。

alloc initWith するか NSLog(@"%@", [NSString stringWithUTF8String:[messageData bytes]]); で

318 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 22:58:01 ]
>>317
ありがとうございます。エラーが消えました!
基本的にreleaseするのはallocした時だけって認識持っといていいんですかね・・・

319 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:09:52 ]
www.google.co.jp/search?q=%E3%82%B3%E3%83%B3%E3%83%93%E3%83%8B%E3%82%A8%E3%83%B3%E3%82%B9%E3%82%B3%E3%83%B3%E3%82%B9%E3%83%88%E3%83%A9%E3%82%AF%E3%82%BF

320 名前:デフォルトの名無しさん mailto:sage [2009/09/20(日) 23:31:07 ]
なるほど、ありがとうございます。コンビニエンスコンストラクタは
放っておけば勝手にreleaseされるんですね。



321 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 13:35:53 ]
本当に糞面倒な言語だな

322 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 16:47:43 ]
基本、Cだからな

323 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 21:42:41 ]
言語関係ねえ

324 名前:デフォルトの名無しさん [2009/09/23(水) 22:42:16 ]
2009-09-23 22:38:40.195 test[4488:5203] *** _NSAutoreleaseNoPool(): Object 0x101d660 of class NSCFNumber autoreleased with no pool in place - just leaking
Stack: (0x305a2e6f 0x30504682 0x2dc4 0x960b0155 0x960b0012)

ビルドとデバッグをすると、あるところでこういうメッセージが出るのですが、
これって何か問題が起こっているのでしょうか?
その後も特に問題なくアプリは動いているのですが・・・
パッとみた感じだと、NSCFNumberはオートリリースされたってだけで別に問題ない・・・んですかね。。。

325 名前:デフォルトの名無しさん [2009/09/23(水) 23:20:20 ]
ちなみに
NSNumber *num = [NSNumber numberWithInt:iRet];
NSLog(...);
[num release];

こういう場所(NSNumberやNSStringの生成や解放を行う場所)で必ず出てくるっぽいです。

326 名前:デフォルトの名無しさん mailto:sage [2009/09/23(水) 23:28:10 ]
>>324
問題があるので autorelease pool について勉強してください

327 名前:デフォルトの名無しさん [2009/09/23(水) 23:30:13 ]
>>326
問題ありですか・・・。
わかりました、ヒントをありがとうございます!
知らない言葉なのでちょっと勉強してきます

328 名前:デフォルトの名無しさん [2009/09/23(水) 23:44:52 ]
今度はObjective-Cの質問です!!

クラスを作るまでもない関数ってどういう風に宣言すればいいのでしょうか・・・?
C言語でいう、ふつうの void swapInt(int a, int b); みたいな感じの関数を作りたいと思ってます。
クラスのメソッドだったら

-(void)showMessage:(NSString *)nsstrMsg flag:(BOOL *)flag
{
  ...
}

みたいな感じで作るのは分かっているのですが・・・。
それとも、Objective-CはC言語のような関数は基本的になくて、それでも使いたい場合は
クラスを定義して、クラスメソッドを用意するのが普通なのでしょうか?

329 名前:328 [2009/09/23(水) 23:45:36 ]
すみません、誤爆です。

330 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 13:23:26 ]
>>328
void swapInt(int a, int b);
じゃだめなの?



331 名前:デフォルトの名無しさん [2009/09/24(木) 15:54:11 ]
>>330
今はそのC言語ライクな書き方で対処して正常に動いてるのですが、
なんかObject-Cのソースの中に、Cの記述方法が混ざってるのが気持ち悪くて・・・

332 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 15:59:03 ]
その感覚がおかしい。

333 名前:デフォルトの名無しさん [2009/09/24(木) 16:13:08 ]
いや、Objective-Cの書き方自体も気持ち悪いんだけど、
その書き方で書くならその書き方でソースコードを統一した方が気持ちいいんだもん・・・

334 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 16:25:44 ]
Objective-Cは言語じゃなくて、C言語のライブラリと、それを使いやすくするためのプリプロセッサだと考えるべき。

335 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:16:44 ]
そんなに気持ち悪いならソースファイル自体をわければいいじゃんか。

336 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 18:22:03 ]
どうしてもというのなら。

@interface NSObject(StaticMethods)
+ (void)showMessage:(NSString *)nsstrMsg flag:(BOOL *)flag;
@end

@implementation NSObject(StaticMethods)
+ (void)showMessage:(NSString *)nsstrMsg flag:(BOOL *)flag
{
...
}
@end

使用例
[NSObject showMessage:@"hoge" flag:NO];

あなた以外誰も得しませんが。

337 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 20:45:44 ]
>>333
他人のObjCコード一度読んでみるといいよ
みんな平気で使ってるから

338 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:10:20 ]
>>326
すんません、>>282わかりますか?

339 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 21:10:41 ]
気持ち悪さで言うなら "nsstrMsg" の方がよっぽど気持ち悪いがな。

340 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:37:19 ]
>>338
NSApplicationMain()を実行するとイベントループという名の無限ループが開始される。
各アプリケーションにはイベントキューというキューがある。
イベントループの最初にNSAutoreleasePoolオブジェクトが確保される。
イベントループはイベントキューにイベントがはいってくるまで寝る。
Mac OS Xはイベントが発生すると該当アプリケーションのイベントキューにイベントを放り込む。
またはアプリケーションが自分のイベントキューにイベントを放り込む。
イベントキューにイベントが入るとイベントループは目を覚ます。
アプリケーションはイベントに応じて動作を起こす。
確保されたNSAutoreleasePoolオブジェクトが解放される。
始めの当たりに戻る。
アプリケーションを終了するとなんとexit(3)を呼び無限ループを吹っ飛ばす!!

余分な情報も混ぜてみました。必要な所だけお読みください。



341 名前:デフォルトの名無しさん mailto:sage [2009/09/24(木) 22:44:43 ]
>>338
イベントループ内での autorelease pool は NSPortDelegate の handlePortMessage:
呼び出し前に autorelease pool が作られ、呼び出し後に drain される、と思えばok。
(メインスレッドではこれを勝手にやってくれているのであまり気にしなくてよい)

NSThread 等でワーカスレッドを立ち上げただけでは作ってくれないので、そのときは
ちゃんと自前で作ってやらないとautorelease されるインスタンスが登場する処理
(明示的に使うもの、内部処理で使うもの、のいずれも)が>>324の様にエラーになる。

NSThread NSAutoreleasePool でググればたぶん誰かが何か書いてると思う

御指名の 326 じゃないので嫌なら無視してくれ

342 名前:338 mailto:sage [2009/09/24(木) 22:45:40 ]
>>340
すばらしい。。。
いままで、いろんな人に訊いてきたけど、ここまで明快に
わかりやすく答えてくれた方はいませんでした。
これで、安心して[obj autorelease];を使えます。
どうもありがとうございました。

343 名前:338 mailto:sage [2009/09/24(木) 22:50:07 ]
>>341
おお、更なる詳しい説明!
しかしながら、>>340さんの説明までは理解できましたが、
>>341さんの説明は自分の知識不足でちょっと難解です。。。
はぁ。。
せいぜいがんばります。
どうもありがとうございます。

344 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:36:34 ]
www.remus.dti.ne.jp/~yoshiki/cocoa/ed1/index.html
このあたりも凄く参考になるぜ
第10-13回らへん

345 名前:デフォルトの名無しさん mailto:sage [2009/09/25(金) 23:59:48 ]
MOSAの人は早くテクニカルドキュメント要約ライブラリの作成の仕事に戻るんだ

346 名前:338 mailto:sage [2009/09/26(土) 00:34:43 ]
>>344
おわっ、これはかなりわかりやすそうな予感
勉強してみます
どうもありがとう!

347 名前:デフォルトの名無しさん mailto:sage [2009/09/29(火) 18:33:50 ]
UIButtonのRounded Rectタイプのボタンで,画像を使わず手軽にボタンの色を変える事は出来ないでしょうか?

348 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 06:42:58 ]
>>347
無理です
あと、ここではなくiPhoneアプリ開発のスレに書きこんだ方がいいかと

349 名前:デフォルトの名無しさん [2009/10/09(金) 06:08:24 ]
もの凄い初歩的な質問かもしれないのですが、
とあるサイトに↓のようなコードがありました。

NSMutableArray *anArray = [[NSMutableArray alloc] init];
NSString *str = [[NSString alloc] initWithString:@"文字列"];
[anArray addObject:str];
[str release];

NSStringのstrをNSMutableArrayに追加しているのですが、その直後にstrをreleaseしています。
NSMutableArrayに追加するということは、クラスのインスタンスをコピーして追加するという事なのでしょうか?
addObjectした後は、元のオブジェクトは必要なくなるって認識でいいのでしょうか?

350 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 06:38:19 ]
stackoverflow.com/questions/696417/nsmutablearray-add-object-as-pointer-only



351 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 08:42:00 ]
>>349
retain/release について勉強してください。その辺わかってないと、
プログラム書いてるといずれ意味不明なクラッシュが多発して
どうしようもなくなりますよ。
developer.apple.com/iphone/library/documentation/cocoa/Conceptual/MemoryMgmt/Articles/mmPractical.html

release は C++ でいう delete とは違って、即座にオブジェクトを
破壊するわけではないです。retain カウントを減らすだけです。
retain カウントがゼロになれば、自動的に dealloc が呼ばれてオブジェクトが
なくなります。

あるオブジェクトを持っておきたい人は、
retain して retain カウントを増やします。
いらなくなったら、 release して retain カウントを減らします。
誰からもオブジェクトがいらなくなったら、自動的に dealloc されます。

NSMutableArray に addObject すると、NSMutableArray は
そのオブジェクトを保持していたいので、 retain されます。
一方で、>>349 のコードを書いているあなた自身は
もうそのオブジェクトは直接はいらなくなるので、release しちゃっていいです。

インスタンスがコピーされているわけじゃなくて、
NSMutableArray がこのオブジェクトを保持するぜ!と言っているので、
あなたはもうこのオブジェクトを保持している必要がなくなるわけです。

352 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:54:17 ]
>>351
ありがとうございます。もんのすごく分かりやすいです。
一応リンク先の方も読んでおこうと思います。
結構既にメモリまわりのエラーが時々出たりしているので・・・

353 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:06:58 ]
「一応」じゃなくてちゃんと読め。

354 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 15:11:02 ]
>>353
そうですね、ちゃんと読みます。
リンク先が英語で焦ったのですが、メモリに関する日本語リファレンス探したらあったのでそっちを読みます。

https://developer.apple.com/jp/iphone/library/documentation/Cocoa/Conceptual/MemoryMgmt

355 名前:デフォルトの名無しさん mailto:sage [2009/10/10(土) 18:22:49 ]
>>282
GNUSTEPのソースを追えば、理解できると思う。


356 名前:デフォルトの名無しさん [2009/10/11(日) 18:49:15 ]
以下のコードで指定のURLからファイルを取得しようとしているのですが、
bad URLというエラーが返されてしまいます。
NSLogでnssUrlを表示させ、そのURLをコピペしてブラウザから閲覧したら確かに見る事ができるのでURLは間違っていないはずです。

NSString *nssUrl = [NSString stringWithFormat:@"%s/%s/%@/%s", SERVER_ADDR, DIR_AREA, [semanticList objectAtIndex:i], FILE_SUBJECT];
NSURL *url = [NSURL URLWithString:nssUrl];
NSMutableURLRequest *req = [NSMutableURLRequest requestWithURL:url];
NSURLResponse *resp;
NSError *err;

NSData *result = [NSURLConnection sendSynchronousRequest:req returningResponse:&resp error:&err];
NSLog([err localizedDescription]); //←bad URLと表示される

NSString *subjectData = [[NSString alloc] initWithData:result encoding:NSShiftJISStringEncoding];
[subjectData release];

このコードに何か問題がありますでしょうか?

357 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 18:56:45 ]
そのコピペしたURLを直接NSStringに nssUrl = @"hoge"ってつっこんだ結果はどうなってるのさ?

358 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 18:59:50 ]
>>357
あれ?それだとエラーが出てこなくてちゃんと動きます。
謎なんですけど・・・

359 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:03:50 ]
nssUrl を characterAtIndex で unichar 出して中身見ると、変なモンが混ざってると思うぞ。

360 名前:デフォルトの名無しさん [2009/10/11(日) 19:09:17 ]
NSLog(@"url=%@",[url absoluteString]);
で url の方にちゃんと入ってるかどうか確認したところ
url = (null)
と表示されました。>>357さんのようにNSStringに直接ぶちこんだ時はちゃんとurlが表示されました。
でも、NSLog(@"nssUrl = %@", nssUrl);でnssUrlの中身を確かめたら、
stringWithFormat:で生成したときもちゃんとURLが表示されます。

NSURL *url = [NSURL URLWithString:nssUrl];
に何か問題があるのでしょうかね・・・



361 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:13:54 ]
>>359
おぉ、ありがとうございます。1文字ずつ表示させていったら
[semanticList objectAtIndex:i]のあとに空白?みたいなのが1つ入ってました。
なんでだろう・・・とりあえず後は自分で原因探してみます。ありがとうございました!

362 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 19:27:03 ]
あまりスマートじゃないですが、固定長のデータなのでsubstringToIndexで対処しました。
ありがとうございました。

363 名前:デフォルトの名無しさん [2009/10/12(月) 00:13:57 ]
char*をNSNumber型に変更するスマートな書き方はありますか?


364 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 01:29:23 ]
それポインタだろ。cString のことか?

365 名前:デフォルトの名無しさん [2009/10/12(月) 02:01:49 ]
ファイルの削除に関する質問です。

NSError *err;
if([[NSFileManager defaultManager] isDeletableFileAtPath:filePath]){
  NSLog(@"消すことが可能");
  [[NSFileManager defaultManager] removeItemAtPath:filePath error:&err];
  NSLog([err localizedDescription]);
}

上のコードを実行すると、NSLogの部分でEXC_BAD_ACCESSが出ます。
そもそものNSErrorの使い方が間違ってるのでしょうか?

366 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:21:12 ]
NSError *err = nil;
ってしてみて

367 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 02:51:14 ]
>>366
ありがとうございます!
無事エラーが出ないようになりました。
なんかよくわかりませんが、allocもinitもせずに宣言するときはとりあえずnilをぶち込んでおく癖をつけておきます。

368 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:06:32 ]
>>364
そうです。Cの関数から返されたポインタのcharをNSNumberにしたいです。
今はNSStringに変換してからNSNumberに再変換してます。。


369 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 03:26:11 ]
> NSStringに変換してからNSNumberに再変換

何したいのか分からないから、この処理の部分を書いてみて

370 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:10:56 ]
>>369
char *c = (Cの関数);
NSString *str = [NSString stringWithCString:c];
NSNumber *num = [NSNumber alloc] initWithInt:[str intValue]];

NSStringを介さずNSNumberにしたいです。




371 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:23:25 ]
[NSNumber numberWithInt : atoi(c)];

ってことか。NSString かませる必要ないね。

372 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 04:41:21 ]
>>371
そんな関数があるんですね、ありがとうございました!


373 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 07:34:32 ]
>>370
べつにそれでいいでしょう。なんでそれじゃいやなの?

あと、strintWithCString は deprecated なので使わないこと!
文字コードの問題でいずれハマりますよ。
かならず UTF8String か encoding: つきのメソッドをつかってください

374 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 11:07:42 ]
>>367
「とりあえずnilをぶち込んでおく」とかいう意味のない癖をつけるよりも、
NSErrorに触る前にその処理が成功したのか失敗したのか判断する癖をつけましょう。

developer.apple.com/mac/library/documentation/Cocoa/Conceptual/ErrorHandlingCocoa/CreateCustomizeNSError/CreateCustomizeNSError.html#//apple_ref/doc/uid/TP40001806-CH204-SW2

処理が成功した場合、NSErrorにobjectが代入されていることは保証されていません。

375 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:47:17 ]
意味なく無いだろ

376 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 22:54:27 ]
>>375
いや、訳も分からずとりあえずnilを入れるのは良くないよ、て言いたいんじゃないの?

377 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 00:58:25 ]
値が未定義な自動変数がクラッシュの
温床になるって書いて置けばまだ
分かりやすいかな。

378 名前:デフォルトの名無しさん mailto:sage [2009/10/13(火) 02:04:19 ]
萩原本にはNSErrorにほ取り敢えずnil入れとく癖を付けろと書いてあったよ。

379 名前:デフォルトの名無しさん [2009/10/14(水) 16:51:04 ]
質問です。

クラスAの中でクラスBのオブジェクトを保持したくて、
クラスBの中でクラスAのオブジェクトを保持したいのですが、
それぞれのヘッダファイルの中でimportしようとすると入れ後状態?みたいになって
コンパイルが通りません。こういう場合はどうすればいいのでしょうか。

380 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:58:48 ]
>>379
循環参照が発生してるのかな?
スーパークラスかインターフェイスを作成して、それを保持させるとどうかな?



381 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 16:59:38 ]
@class

382 名前:デフォルトの名無しさん [2009/10/14(水) 17:00:05 ]
>>380
あーなるほど、そういう方法があるんですね。
ありがとうございました!

383 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:13:55 ]
>>380, 382
まてまてまてw
>381 の言う通り、@class をつかえ。
ClassA.h; @class ClassB @interface ClassA : Hoge {ClassB *clsB} @end
ClassA.m; #import "ClassA" #import "ClassB"

ClassB.h; @class ClassA @interface ClassB : Piyo {ClassA *clsA} @end
ClassB.m; #imprt "ClassB" #import "ClassA"

384 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:14:49 ]
しつれい、@class ClassA; ね。";" が抜けた

385 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 17:59:46 ]
>>383
ぎゃー、すでに変更し始めてました。
ちょっとバックアップファイルから復元して@classでやってみます。

386 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:04:48 ]
>>385
Objective-Cに興味があってこのスレ見てるけど、コードを書いた事が無いのにレスした俺のせいでスマン…

387 名前:デフォルトの名無しさん [2009/10/14(水) 18:13:47 ]
@classで一瞬で解決しましたw
ありがとうございました!

>>386
なんという・・・w

388 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 18:48:20 ]
>>386
>Objective-Cに興味があってこのスレ見てるけど、コードを書いた事が無い
なんだ、俺は他にもいたのか

389 名前:デフォルトの名無しさん mailto:sage [2009/10/14(水) 21:15:20 ]
一度くらい書けよw

390 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 10:51:48 ]
cat > hello.m
#include <stdio.h>
int main(int argc, char*argv[]){printf("Hello world.\n");return 0;}

^D

make hello
./hello

サフックスが.mだからObjCとしてコンパイルされます!
これでObjCプログラマの仲間入りです!




391 名前:デフォルトの名無しさん mailto:sage [2009/10/15(木) 11:06:11 ]
それでいいなら俺も書いた事あるぜ!w

392 名前:デフォルトの名無しさん [2009/10/16(金) 00:58:07 ]
NSStringの中に文章が入っているのですが、その中にあるURLをリンクに置換したいと考えています。
例えば文章の中に
www.google.co.jp/
のようなアドレスがあれば、
<a href="http;//www.google.co.jp/>http;//www.google.co.jp/</a>
のように置換したいのですが・・・やり方がいまいちわかりません。
とりあえずNSStringのメソッドを見る限りだと無理で、NSMutableStringのメソッドを見る限りだと、
replaceOccurrencesOfString:withString:options:range:のようなメソッドがあったのですが、
正規表現が使えるのか不明です。何かいい方法はないでしょうか?

393 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:04:28 ]
regex(3)

394 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 01:49:26 ]
>>392
ありがとうございます。
RegexでググったらRegkit liteというのがあったのでそれを使いました。
ただ、URLのマッチングが上手くいかないので見ていただけないでしょうか・・・


NSString *searchString = @"I like www.google.co.jp/ yeah!!";
NSString *regexString = @"(|https://){1}[\\w\\.\\-/:\\#\\?\\=\\&\\;\\%\\~\\+]+";
NSString *replaceWithString = @"<a href=\"$1\">$1</a>";
NSString *replacedString = NULL;
replacedString = [searchString stringByReplacingOccurrencesOfRegex:regexString withString:replaceWithString];

これで置換した結果が、
I like <a href="http://"></a> yeah!!
になります。www.google.co.jp/が消えてしまってるのですが、何が間違ってるのでしょうか?



395 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 02:01:15 ]
謎ですね。http://しかマッチしていないなら
I like <a href="http://"></a>google.co.jp yeah!!
になりそうなんですけどね・・・

396 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 02:05:04 ]
そのライブラリは知らないけど、普通はカッコで囲ってるところしかキャプチャされないのでは?

397 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 02:25:22 ]
NSString *regexString = @"(https?://[a-zA-Z\.\-\#\?\=\&\;\%\~\+]+)";

でいいんじゃないの

398 名前:デフォルトの名無しさん [2009/10/16(金) 02:44:41 ]
括弧で囲ってるところしかキャプチャされないんですか・・・
無事マッチできました。ありがとうございました!

399 名前:デフォルトの名無しさん [2009/10/17(土) 05:37:25 ]
次のようなプログラムを動かすと配列0番目を参照してるはずなのに
200が返されます。何故なんでしょうか?

int main(int argc, char *argv[]) {
array = [[NSMutableArray alloc] init];

[self bindInt:0 value:100];
[self bindInt:0 value:200];

Element *h = [array objectAtIndex:0];
printf("value:%d¥n", *(int*)h.p);
}

- (void)bindInt:(int)holderId value:(int)value
{
// Elementクラスにはvoid *p変数のみ定義されてる
Element *holder = [[[Element alloc] init] autorelease];
holder.p = &value;

[array addObject:holder];
}

ちなみにbindIntのhoderId引数自体を外すと0が返されます。
これもよく理由がわかりません。。


400 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 06:31:06 ]
なんでintのポインタ渡すの? それスグ死ぬやん。



401 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 06:50:20 ]
>>400
へ、死ぬんですか。
変数pはvoid*にして、様々な型を格納できるようにしたかったのです。

まだあまり理解できていないのかも。
この辺りは何をキーワードに調べれば良いのでしょうか。

402 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 10:15:22 ]
void * に格納できるのはポインタだけで、「様々な型を格納」できたりはしないぞ。

403 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 11:45:32 ]
その前に self って誰?

404 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:11:23 ]
プールもないのに autorelease ?

405 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:29:59 ]
>>399
>holder.p = &value;
ここでスタック上に一時的に作られたローカル変数のアドレス取ってるから
ゴミを拾って当たり前
Cの初歩で「ローカル変数のアドレス返しちゃダメ」みたいなトピックあると
思うからその辺から読む事

406 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 14:54:20 ]
NSImage *backBlock = [[NSImage alloc]
 initWithContentsOfFile:@"./images/Block_0.png"];
のところで、
initializer element is not constant
というエラーが出て途方に暮れています。
何が悪いのか、教えてください。

407 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 15:13:57 ]
それを
NSImage *backBlock = [[NSImage alloc] initWithData:[NSData dataWithContentsOfFile:@"./images/Block_0.png"]];

とかに変えてもエラーが出るのなら、他の部分が問題。

408 名前:デフォルトの名無しさん mailto:sage [2009/10/17(土) 18:26:43 ]
というか、突っ込みどころが多すぎてどこから突っ込んだらいいのやら。

409 名前:デフォルトの名無しさん [2009/10/18(日) 05:31:50 ]
とりあえず俺のケツから突っ込んでこいよ

410 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 07:59:06 ]
次のようなコードでmyNotePadオブジェクトのプロパティの値を変えようと試みているのですが、//Diagnosticsの部分でNSLogの結果が 0 や (null)と表示されてしまいます。

// プロパティnoteTextにコンテントの内容をセット
myNotePad.noteText = tvContent.text;

// プロパティsavedDateに日付をセット
myNotePad.savedDate = [NSDate date];

// プロパティsaveCyclesをインクリメント
myNotePad.saveCycles++;

//////// Diagnostics
NSLog(@"in saveData - tvContent.text - %@", tvContent.text);
// これはちゃんと表示される

NSLog(@"in saveData - noteText - %@", myNotePad.noteText);
// nullと表示される

NSLog(@"in saveData - savedDate - %@", myNotePad.savedDate);
// nullと表示される

NSLog(@"in saveData - saveCycles - %d", myNotePad.saveCycles);
// 0と表示される


初歩的な質問で申し訳ないのですが、どなたか教えていただけますか?
マジで困ってます・・・




411 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 08:23:33 ]
すみません自己解決しました

412 名前:デフォルトの名無しさん mailto:デフォルトの名無しさん [2009/10/19(月) 11:03:58 ]
>>411
自己解決したのはいいとして、何が原因だったかくらい書いたらどうかな?
それを読んで役に立つ人もいるはずだし。

ここでいろいろ助けてもらっても、結果は独り占めして誰にも教えたく無い、
っていう性格なら、まあ強制はしないけどね。

413 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 12:33:12 ]
変数に入った文字列を=で代入なんてできない。初歩的すぎる。

414 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 12:47:57 ]
「myNotePadがnilでした」に 3 retainCount かける。

>>413
なんの話をしているの?

415 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 13:54:51 ]
>>412
そうですね。すみません。
実はメモリをallocしてなかったのが原因でした

>>413
初心者は帰れ!!!!

>>414
そうです。nilでした

416 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 13:57:45 ]
余計なことを言ったばかりに一気に印象が悪くなる。

417 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 19:17:41 ]
馬鹿は死ななきゃ治らないから415の罪じゃないさ。

418 名前:デフォルトの名無しさん [2009/10/19(月) 21:55:11 ]
malloc: *** error for object 0x4c52320: pointer being reallocated was not allocated
これは一体どういう意味なのでしょうか?
メモリを再確保されたポインタはメモリ確保されませんでした?
いまいちよく分からないのですが、具体的にどういう時に出るエラーなのでしょうか?

419 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:13:15 ]
>>418
/usr/lib/libSystem.B.dylib の szone_realloc() 関数の中で
szone_size() 関数が 0 を返すと発生するエラーだよ。

www.opensource.apple.com/source/Libc/Libc-583/gen/scalable_malloc.c

420 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:13:24 ]
>>418
#include <stdlib.h>

int main(int argc, char **argv)
{
char *foo = "abc";
foo = (char *)realloc(foo, sizeof(char) * 4);
return 0;
}
みたいなことをしたときとか。



421 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:14:15 ]
再確保しようとしたポインタは確保されませんでした?

422 名前:418 [2009/10/19(月) 22:44:28 ]
んー明示的にメモリの再確保してる場所はないんですけどね・・・
NSMutableStringのappendStringあたりで変なことになってるんですかね。
とりあえずどういうエラーなのかは分かったので、地道に問題箇所探していきます。
ありがとうございました!

423 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 22:46:34 ]
>>414
413 は、OpenStep API が出る前で NSString* が無かった頃の人なんだよ。
というかここは Obj-C スレなので、Foundation があることを
仮定しないのが自然じゃないかな。

あ、でも、property 使う時点で Obj-C 2 か ...

424 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:01:33 ]
NSStringが登場する前だってNXStringとかあったじゃん

425 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:40:46 ]
疑問です。

NSLog(@"%.f", 0.5);
NSLog(@"%.f", 1.5);
NSLog(@"%.f", 2.5);
NSLog(@"%.f", 3.5);
NSLog(@"%.f", 4.5);
NSLog(@"%.f", 5.5);

とした時、四捨五入されて出力結果は
1 2 3 4 5 6
になると思いきや実際には
0 2 2 4 4 6
となりました。偶数時は5以下は切り捨て。奇数時は5以上を繰り上げているようです。
printfでも同様でした。
なぜこうなるのでしょうか?
10.5、10.6、Cocoaアプリケーション、Standard Tool、C89、C99 等いくつか状況を変えて試しましたがいずれも同じ結果でした。

426 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:55:31 ]
>>425
偶数丸め


427 名前:デフォルトの名無しさん mailto:sage [2009/10/19(月) 23:56:05 ]
NSURLConnectionを使ってHTTPでデータの差分取得をしたいのですが

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:urlString] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:60];
[request addValue:@"Wed, 30 Jul 2008 12:12:12 GMT" forHTTPHeaderField:@"If-Modified-Since"];
[request addValue:@"445-" forHTTPHeaderField:@"Range"];

NSData *data;
NSURLResponse *response;
NSError *error = nil;
data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];

とりあえずリファレンスとか見ながら頑張って↑のコード書いたのですが、
結局差分取得はせずに全部ダウンロードしてしまいます。
どうすればいいのでしょうか・・・

428 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:02:33 ]
>>426
ググってみました。ありがとうございます。

429 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:06:39 ]
あー、アホだー
bytes=が抜けてました。死んできます。

430 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:15:00 ]
この様はiPhoneさまさまなのかな。



431 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 00:59:23 ]
サマーはもう終わりました

432 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 11:33:53 ]
次のスレのはじめには、ここはあくまで言語仕様のスレで、
Mac / iPhone Cocoa プログラムはそれぞれのスレにいくよう
強調したほうがよいかも

433 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 16:28:20 ]
別にいいんじゃん?暇だし。

434 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 16:52:33 ]
まぁね
暇だし
仕事ないし

435 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 16:53:48 ]
>>434
暇なら仕事みつけろよwww

436 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 17:01:38 ]
働いたらそこで試合終了だって安西先生が言ってた

437 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 17:22:02 ]
俺は、親父が残してくれた財産で、
働かずに住んでいるよ。
結局、人生は親の財産次第。

馬鹿な親の子に生まれた子は、一生馬鹿。

438 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 19:01:23 ]
奇遇だな。俺も2chではそうなんだよ。
相続税のこととか考えると、まったく頭が痛いよ。

439 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 20:44:08 ]
>>437,438
働かず、暇があるなら税法をやれば良い。
それで今の税法の穴を見つけてこっそり使えばいいんじゃね。

440 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 21:17:46 ]
スレ違いうざい。



441 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:10:19 ]
そういうスレ違いは許さないんだなw
まぁ当たり前っちゃ当たり前か。スレ違いというか、板すら違うからなw

442 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 22:42:31 ]
国内のMac信者ってなんでこう雑魚ばっかりなんだろう

443 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:04:20 ]
まぁ荒れる前にこの話題は終わらせちゃおうぜ!!
releaseだ!release!!

444 名前:デフォルトの名無しさん mailto:sage [2009/10/20(火) 23:17:59 ]
Cocoa でドットを描くのは NSRectFill(NSMakeRect(x,y,1,1) するのが一般的なの?
難しいな…

445 名前:デフォルトの名無しさん [2009/10/21(水) 22:31:28 ]
せっかくだからOpenGL使ったら?

446 名前:デフォルトの名無しさん mailto:sage [2009/10/21(水) 22:39:22 ]
なるほど。GL_POINTS を使って点を描く訳ですね。
お絵描きソフトを作ろうと思っているのですが、NSBezierPath 等 Cocoa の API を
使うのと比べてメリットはどんなところがあるでしょうか。

447 名前:デフォルトの名無しさん [2009/10/22(木) 09:44:53 ]
他機種向けのソフトを作る時も、流用しやすい


448 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 19:26:34 ]
クロスプラットフォームなのは嬉しいですね。
ただ今回はプラットフォーム固有の機能をガンガン使って
コーディングするつもりなので、他機種の事は考えていません。

449 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 19:35:39 ]
>>444みたいな面白いこと言い出す奴にそれは無理だと思うの

450 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 19:43:08 ]
ん、どうしてそう思ったの?



451 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 21:46:06 ]
何だ、冷やかしか

452 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 23:49:37 ]
前々から言おうと思ってたけど、iPhoneアプリ開発スレ行けよ
こっちとマルチすんな

453 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 23:53:20 ]
前々?マルチ?iPhone?
いったい誰に向かって言ってるんだ?

454 名前:デフォルトの名無しさん mailto:sage [2009/10/22(木) 23:59:16 ]
普通の人には見えない何かが見えちゃうと大変だな…

455 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:10:45 ]
>>450-451,453-454
www

456 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:13:51 ]
何がしたいのか全く分からん…
お大事にね

457 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:25:50 ]
で、結局 >>449 は何だったの?

458 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 00:26:49 ]
君らもうMac板に帰ったら

459 名前:デフォルトの名無しさん [2009/10/23(金) 02:43:38 ]
おちつけぢょwww

460 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 03:14:57 ]
何だ、冷やかしか



461 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 04:27:21 ]
ひややっこおいしいです

462 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 16:02:24 ]
NSStringに0123918201とか023384722とかの数字文字が入っているのですが、
それらのNSStringを

if([numString1 intValue] < [numString2 intValue]){ }
else if([numString1 intValue] == [numString2 intValue]){ }
else{ }

のように数値で比較した時、なぜか絶対にイコールのところに入ってしまいます。
NSLogでそれぞれに入っている数字は違う事を確認してるのですが、
それでも==の条件式に当てはまってしまいます。
どういう原因が考えられますか?

463 名前:デフォルトの名無しさん [2009/10/23(金) 16:17:41 ]
すみません、調べてみたら、NSStringに入ってる数字は違うのですが、
intValueにしたら全然違う数値になっている事がわかりました。

NSStringに031424045645って入ってるのに
intValueの値は2147483647になってます。
これは何でなんでしょうか・・・?

464 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 16:27:38 ]
31424045645 → 7 5104 E24D
2147483647 → 7FFF FFFF


465 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 16:28:45 ]
signed int の最大値 INT_MAX が 2^31-1 = 2147483647 って知らないの?
doubleでも使え

466 名前:デフォルトの名無しさん [2009/10/23(金) 16:39:38 ]
あーなるほど・・・。intは4バイトなのでオーバーフローしちゃってるわけですね。
unsigned型でも全然桁がたりませんね。基本的に12桁以下の数値の文字なのですが、
これを数値的に比較するのにいい方法はないでしょうか?

467 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 16:41:29 ]
long longか__int64

468 名前:デフォルトの名無しさん [2009/10/23(金) 16:48:28 ]
>>465
doubleValueだと==を検出できなくなる可能性がありますね。
roundとかで切り捨てれば解決なのかな・・・
ちょっとやってきます。

469 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 17:15:02 ]
NSLog(@"%ll", [numString1 longlongValue]);
でlong long型が表示出来なかったので、数値が確認できず若干不安ではありますが、
期待通りの動作をしているようなので大丈夫なようです。

ありがとうございました。

470 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 17:55:21 ]
%qi です。
ここ参照。
developer.apple.com/mac/library/documentation/Cocoa/Conceptual/Strings/Articles/formatSpecifiers.html#//apple_ref/doc/uid/TP40004265



471 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:01:50 ]
>>470
わぁ、ありがとうございますw
大丈夫だと言い聞かせながらも、もの凄く不安でしたw
念のためちゃんとなってるか調べてきます。

472 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:17:40 ]
NSLog(@"%@ %qi", numStringX, [numStringX longlongValue]);
文字とそれをlonglong型に変換したものの対応表ですが・・・

031423045645 5833744870023364608
031423045646 5833744874318331905
031424045644 5838039833024397314
031424045644 5838039833024397315
031424045645 5838039837319364611
031424045646 5838039841614331908
031425045644 5842334800320397317
031425045644 5842334800320397318
031425045645 5842334804615364614
031425045646 5842334808910331911

全然大丈夫じゃなかったです。一応文字数値が大きいものほど、
longlongの値も大きくなっているので正常に動作はしているのですが、
んー何でこう思った通りに動かないんだろうか(´・ω・`)
どこも間違ってるようには見えないんですけど・・・

473 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:34:11 ]
031423045645      → 7 50F5 A00D
5833744870023364608 →  50F5 A00D 0000 0000

何が起こってるんだろ?

474 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 18:56:22 ]
031423045646      → 7 50F5 A00E
5833744874318331905 →  50F5 A00E 0000 0001

二つ目に関してはLSBが1になってますね。
んー・・・元のNSStringに何か問題があるんですかね・・・

475 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 19:53:27 ]
試しに↓をやってみたら
NSString *testString = [NSString stringWithString:@"012345012345"];
NSLog(@"test: %@ - %qi", testString, [testString longLongValue]);

出力が
test: 012345012345 - 12345012345

になってるので、基本的な使い方としては間違ってない感じですね。
numStringの中に入ってるデータに何か罠がありそうな感じですが、
普通にNSLog(numString)で表示させても、特に変な様子は見られないんですけどね・・・

476 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:01:16 ]
ここはお前のメモ帳だ。いいぞもっとやれ。

477 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:02:33 ]
何かついてるんでしょうね。とりあえず、NSScanner で読んでみたら?
NSString *str = [NSString stringWithUTF8String:"031425045646"];
NSScanner *scan = [NSScanner scannerWithString:str];
NSLog(@"%@, %qu", str, [str longLongValue]);
NSLog(@"%qu", value);
//031425045646(, 31425045646
//31425045646

478 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:06:18 ]
あ、ごめん、スキャン部分が抜けてた。
uint64_t value;
[scan scanLongLong:(long long*)&value];

479 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:09:01 ]
NSLog(@"%@ %qi", numStringX, [numStringX longlongValue]);

longlongValue なんて method はないよ。
ほんとうにこのコードで出した対応表なの?

480 名前:デフォルトの名無しさん [2009/10/23(金) 20:10:37 ]
ちょっとNSScannerでやってみます

>>479
その部分は手打ちなのでタイプミスしました。
ソースの方はちゃんとlongLongValueになってます



481 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 20:28:52 ]
NSScannerで確かめて見たら正常に表示されました。
これに関連して、比較用のNSStringを新しくつくって、そこに元のNSStringをぶちこんで
表示させてみたら同様に正常に表示されました。何なんだろう・・・
とりあえず比較用のNSStringを作る事で対処しました。
これで比較部分がようやく安心の動きになるはず・・・
とりあえずありがとうございました!

482 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 01:24:31 ]
おまえらメソッド定義の開き括弧って別の行にする派?
- (id)fucknglyLongMethodNameContainingThousandsOfCharacters:bar
{
それともメソッド名の行にまとめる派?
- (id)fucknglyLongMethodNameContainingThousandsOfCharacters:bar {

あと、メソッドチェインで右の方まで来ちゃったときって、新しい行でメソッド名始めたりする?
[[omgThisIsTooLongSoThatTheNextMethedHangsAtFarRightPositionWTF foo]
thisIsTheSecondMethodSTFU:bar
multipleArgsAnotherPain:poo];
それとも同じ行に置く?
[[omgThisIsTooLongSoThatTheNextMethedHangsAtFarRightPositionWTF foo] thisIsTheSecondMethodSTFU:bar
multipleArgsAnotherPain:poo];

483 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 02:17:55 ]
-(void)括弧は同じ行にする {
[[そんなに長いメソッド名 付けたりはしないけど] 基本的には同じ行かな];
id hoge = [コード見やすい方が気分がいいので あんまりにも右に長くなっちゃう場合は];
[hoge コードを分けちゃいますね];
}

484 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 12:50:09 ]
WikipediaでCの例文見ると
関数宣言は改行で
void a
{
}
条件式は
if () {
}
while () {
}
改行してるみたい。

485 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 13:09:58 ]
>>484
Wikipediaは例として好ましくありません。
例として引用する場合は、Wikipediaが参照・参考にしている一次情報を引用しましょう。

括弧を次の行におくのはGNUコーディング規約で推奨されています。
同じ行に置く形もどこか有名な団体/企業での採用が元だったと思いますが忘れました(Sunだったかな)。

GNUコーディング規約
www.gnu.org/prep/standards/standards.html#Formatting
www.sra.co.jp/wingnut/standards-j_toc.html

ちなみに私は括弧は同じ行、メソッドチェインは>>483と同様に分割を検討します。
状況によっては新しい行で開始します。同じ行には置かないでしょうね。

486 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:14:08 ]
GNUスタイルは参考にするな、やっちゃダメな例だ
Linuxコーディングスタイルがルールも少なく誰でも従いやすい
でも、objc的にはAppleのコーディングスタイルをまねるのが一番いいのでは
Appleなりの理由があってあのスタイルに落ち着いたんだろうから
あと、Perlベストプラクティスのコーディングスタイルも学ぶところが多かった


487 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:24:09 ]
コーディングスタイルなんて、プロジェクト内で一貫してればなんでもいいべ。

488 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:27:54 ]
いきなりタブ・インデントは8文字とか書いてあるけど……

489 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:35:52 ]
これか。

lxr.linux.no/linux/Documentation/CodingStyle

490 名前:デフォルトの名無しさん mailto:sage [2009/10/25(日) 20:41:17 ]
基本Appleのサンプルコードを真似する形で。



491 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 04:47:35 ]
ここで質問すべき事なのかよく分からないのですが、
Macのシステム終了、再起動、をするプログラムを作ろうと思ってます。
で、実装についてなんですが、よく分からないのでsystem関数で
再起動、システム終了のコマンドでも送ってみようかと思います。
shutdown -h now
ですね!でもこれってrootじゃないアカウントからでも効くんでしょうか?
あと、保存していないファイルとかは保存されないまま強制終了しちゃうのでしょうか?

492 名前:491 mailto:sage [2009/10/26(月) 04:51:26 ]
自分で試す気は無いのでよろしくお願いします。

493 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 06:39:57 ]
>>492
自分で試せヴォケ

494 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 06:57:41 ]
>>491
rootじゃなくてもだいじょうぶ

495 名前:デフォルトの名無しさん mailto:sage [2009/10/26(月) 10:10:03 ]
>>491
ここで質問すべきことじゃないですが、shutdown -h now だと
かなり強制的に終了するのでよくないです。ファイル保存しますか?
とかのダイアログも出ません。Apple おすすめの方法は
developer.apple.com/mac/library/qa/qa2001/qa1134.html
です。

496 名前:デフォルトの名無しさん [2009/10/27(火) 07:55:44 ]
既出かもしれんが、
foo.cppにあるint exec()って関数をbar.mのmain()から呼び出すのってなんか宣言必要なの?
ldでexec()のシンボルが見つからないと言われる・・・

497 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 09:28:44 ]
>>496
foo.cpp 側で extern "C" しとかんと Obj-C からは呼べないだろ、JK

498 名前:デフォルトの名無しさん mailto:sage [2009/10/27(火) 21:55:28 ]
>>497
Thx。やってたんだが、どうやらヘッダーファイルで宣言してたのがダメだったらしく、cppファイルに直接externしたら動いた。感謝。

原因まではおってないが‥

499 名前:デフォルトの名無しさん [2009/10/29(木) 13:23:39 ]
メインスレッドから実行したスレッドAの処理が終わるまで
メインスレッドを待機させるにはどう書けば良いのでしょうか。

500 名前:491 mailto:sage [2009/10/29(木) 13:33:31 ]
[self performSelectorOnMainThread:<#(SEL)aSelector#> withObject:<#(id)arg#> waitUntilDone:<#(BOOL)wait#>];

じゃねーの。



501 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:34:15 ]
名前消し忘れてたヨ

502 名前:499 mailto:sage [2009/10/29(木) 13:36:38 ]
やっぱりperformSelectorOnMainThread使わないといけないんですね。
あまりメソッド増やしたくなかっただけなんですが、どうもです。

503 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 13:54:21 ]
>>502
「使わないといけない」わけじゃねーよ。
>>500は 物知らずでも使える一番簡単な方法を提示してくれただけだろ。
文句あるなら pthread の関数とか NSCondition でも使ってろ

504 名前:デフォルトの名無しさん [2009/11/08(日) 15:04:31 ]
 簡単なxmlを解析するクラスを作ってます。char型のメンバ変数を持たせたいと思ったのですが、うまくいきません。
@interface SimpleXml : NSOperation {
const char *elementName;
}
オブジェクトの初期化のところで
- (id)initWithRequest: (NSURLRequest*)request name: (NSString *)name
{
self = [super init];
if (self) {
elementName = [name UTF8String];
}
return self;
}
こんな風にしてみた。代入直後でNSLogするとちゃんと代入されてるのですが、実際に使いたいメソッドの中では文字化け?のようなおかしなデータになってます。
比較対象がchar*なので最終的にはchar*が欲しいです。メンバ変数をNSStringにして比較するところでUTF8Stringで変換して比較するとうまくいきます。
ただ、xmlの要素分繰り返し呼ばれる部分なので、毎回UTF8Stringを呼び出すくらいならcharで持たせちゃえと思いました。
それほどおかしなことはしてないつもりなのですが、やっぱりポインタの理解が足りてない感じでしょうか?アドバイスお願いします。

505 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 16:40:23 ]
>>504
-[NSString UTF8String] のドキュメントを読みなさい。
ちゃんと注意が書いてあります。

506 名前:デフォルトの名無しさん mailto:sage [2009/11/08(日) 22:17:39 ]
>>504
NSXMLDocument つかえば?

507 名前:504 [2009/11/09(月) 02:02:48 ]
>>505
ありがとうございます。
もとのNSStringがreleaseされた時点でfreeされちゃうんですね。
うまくできました。

ドキュメントよく読みます。

508 名前:デフォルトの名無しさん mailto:sage [2009/11/09(月) 20:32:01 ]
iPhoneの開発で初めてObjective-Cを使ったが、良いねこれ。
最初はメソッド呼び出しの[]がきめぇwwwwって感じだったんだが、
デフォでリフレクションできるのは良い。
C++よりこっちが普及していれば自分のプログラマ人生も幸せだったのかもしれない、
と思う今日この頃。

509 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 13:06:25 ]
リフレクションって何?

510 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 13:52:19 ]
RTTIのすげぇやつ



511 名前:508 mailto:sage [2009/11/10(火) 15:25:49 ]
つくづく思うのがC++のvirtualってナンセンス。
id型に何でもぶちこめるのもイイ。まさかCでこんな風に扱えるとはね。
メソッドのprivate/publicの定義ができなかったり不満もあるけど。

512 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:31:08 ]
それ、Cやない、Objective-Cや

513 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 15:45:31 ]
C拡張で、ってことでは。

514 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:06:01 ]
virtualがナンセンスだなんて思ったことないわ

515 名前:508 mailto:sage [2009/11/10(火) 16:40:25 ]
スクリプト言語になれると、基本、親のメソッドはなんでも置き換えられてあたりまえという考えに。
基本クラスが違ってもメソッドの名前と引数の型が一緒なら呼べてしまうのも何気にすごい。
それに甘えて使いまくると死ぬけど。

516 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 16:58:33 ]
どれもが同じ実装だったら、何も楽しくないじゃん

517 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 19:21:36 ]
既に C++ が存在しているって事は良い事だよね。
ああいうのが好きな人が楽しめる場所が別にあるから、
お互い邪魔せずに、こっちはこっちで自由にできる。
彼らはどう転んでも Smalltalk 風のオブジェクト指向を
消化できないだろうし、C++0x を見ていると、
対岸の火事で良かったなあと心から思う。

518 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:08:39 ]
無理して語ってる感がすごい

519 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:14:35 ]
ん、そうか?
前世紀から何度も繰り返し語られてる話だけどな。

520 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:17:29 ]
C++のメソッドをCの関数ポインタみたいに実行時バインドしようとすると
virtualのダメさが際立つな。あれはナンセンスと思う
Qtのシグナルスロットとかみたいに言語外の飛び道具が必要になるし




521 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:18:48 ]
いろんなことを混ぜ込めて、結局は何も言ってないみたいな

522 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:22:27 ]
伝わる人に伝われば良いんだよ。別に説得するつもりも無いし。

523 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:26:00 ]
いろんな言語使う人からすると実装の違いがおもしろいんだけどねえ
何か他の言語を否定しがちなのはもったいない感じがする

524 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 20:26:50 ]
ObjC 一本槍な人間が居るとでも?

525 名前:デフォルトの名無しさん mailto:sage [2009/11/10(火) 21:18:48 ]
どんな言語にも欠点はあるし、多少叩かれてもカリカリしなくていいんじゃね

526 名前:508 mailto:sage [2009/11/11(水) 16:00:50 ]
そもそもobjCってmac、iphone開発くらいにしか使わないし、
WEBプログラミングでrubyかPHPかjava、どれでやるかって話にはならないよね。
で、自分はC++に10年以上お世話になってるが、
歴3ヶ月のobjCのが言語として優れてる気がしている。
なにげに[nil method1]でぬるぽにならないのもいいな。

527 名前:デフォルトの名無しさん [2009/11/11(水) 16:08:31 ]
はいはい、もういいから。

528 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 17:47:21 ]
冷たいな(´・ω・`)
ObjCスレなんだから、もっと激しく愛を語ってもいいじゃないか。

529 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 18:58:09 ]
今更30年前に Smalltalk で実現されていたものについてだけ語られても反応に困る
.mm で boost:python と混ぜて使うのが最強ですよとかモダンな話をしようよ

530 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 19:30:20 ]
じゃあ追加して欲しい言語仕様の話でも



531 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:00:46 ]
[hoge method1] でマルチスレッドになりますか?

532 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 22:01:49 ]
最近 object_getInstanceVariable とかを知って悶絶しそうな程展望が開いて小躍りしてます。

533 名前:デフォルトの名無しさん [2009/11/11(水) 22:50:59 ]
>>531
なりません

534 名前:デフォルトの名無しさん mailto:sage [2009/11/11(水) 23:17:52 ]
>>532
reflection つきの オブジェクト指向言語なら出来て当たり前だろう
>>531
[hoge performSelectorInBackground:@selector(method1) withObject:nil]
でオッケー

535 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 00:38:16 ]
昔はこれだけで感動だった。

Smalltalk keys.

Lisp だと apropos とか。

536 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 05:05:03 ]
>>531
goなら可能

537 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 08:51:40 ]
Smalltalk で言ったら fork メッセージだな

538 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 10:12:27 ]
oneway voidなメソッドなら別スレッドで実行されてもいいよな
OSXのランタイムはそういう実装にはなってないけど

539 名前:デフォルトの名無しさん mailto:sage [2009/11/12(木) 12:00:19 ]
>>538
APIが全て thread-safe な理想郷ならそれでもいいけど、
とつぜんあるメソッドが別スレッドで走られると困る事もあるよ

10.5 では NSOperation の concurrent オペレーションは
メインスレッドで動いてたのに、10.6 からそれも別スレッドで
走るようになったので嵌まったのでそういうのはこわいです。

540 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 00:28:16 ]
プロパティのデフォルトアクセサは nonatomic を指定しないかぎり
スレッドセーフだから多少のオーバヘッドには目をつむって自クラス内でも
インスタンス変数は常にプロパティ経由で触るみたいなスタイルが今後は
主流になるのかもね




541 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 14:03:00 ]
個々のインスタンス変数やプロパティの読み書きだけスレッドセーフにしても
あんまり意味ないから、主流にはならないと思う。

542 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:25:51 ]
iPhoneのSDKがらみの質問もここでしてよいのかな。
本体の傾きを求めるとかそういう話だが。

543 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:49:22 ]
だめ。↓辺りでやれ、

[SDK]iPhoneアプリ開発初心者質問箱3[touch]
pc11.2ch.net/test/read.cgi/mac/1254325417/

544 名前:542 mailto:sage [2009/11/19(木) 18:49:07 ]
mac板にあったんだ、iphoneじゃなくて・・・どもです

545 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 20:36:11 ]
ブロック構文ってなんじゃらほい。

546 名前:デフォルトの名無しさん [2009/11/21(土) 20:37:49 ]
www.nogawasakura.net/

547 名前:デフォルトの名無しさん [2009/11/22(日) 21:09:36 ]
NSStringの文字列"0"をASCIIコード10進数の48に変換するにはどう書けば良いのでしょうか?

548 名前:547 mailto:sage [2009/11/22(日) 22:30:21 ]
すいません、間違えました。
ASCIIコードの48をcharもしくはNSStringの0に変換するには
どう書けば良いのでしょうか。


549 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 22:34:08 ]
なんだこのゴミは

550 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 02:56:15 ]
>>549
まあまあ。将来有望な小学生が来たのかもしれんじゃないか。

>>548
で、その48は何で表されてんのかな?



551 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 04:40:12 ]
char c[128]={0};
c[0] = 48;
sprintf(c, "%c", 48);
NSString *nss = [[NSString alloc] initWithFormat:@"%c", 48];

552 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 06:05:21 ]
>>551
オイコラ、char c[128]ってどういうつもりだ。これだから最近の若いもんは・・・。

553 名前:デフォルトの名無しさん [2009/11/23(月) 06:29:27 ]
>>552
えっ、何かマズいっすかね・・・
自分まだ初めて2ヶ月くらいなんです・・・

554 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 07:34:23 ]
Mac関連スレってどこも変な物言いのおっさんばっかりなんだよな

555 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:34:48 ]
>>553
>>551の2行目のようにchar型のデータが欲しいだけなら何もすることは無いので char c; c = 48; で十分だ。
もし3行目のように文字列として扱いたい場合でも今の場合なら一文字目 '0' == 48 と二文字目の '\0'
の分だけなので char c[2]; でよい。
それにchar c[2] = {0} のように書いた場合、2要素目以降は言語仕様上不定(実装上はほぼ確実に0にセットされるが)。

556 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 08:36:27 ]
なんだそんな話か
char c[4096];
とか平気でやってるぞ

557 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 09:17:42 ]
なんと愚かな!

558 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 10:41:38 ]
>>555
なーるほど。そういうことなら問題なっすぃん。
なんか48 61 65 71みたいな数値を文字列に直すのかなーとか思って多めにとっただけっすぃん。

559 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 11:04:11 ]
>555
悪意がないことを先にいっておく
>char c[2] = {0} のように書いた場合、2要素目以降は言語仕様上不定
なる理由はどこから
気になったので、規格書があればそのセクションをお願いします

560 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 11:54:05 ]
>>559
俺も気になったんで見たんだけど、
C99?だと、静的変数と同様の暗黙の初期化になるみたい。
それ以前のは規格書が見れない。
www.jisc.go.jp/
JISX3010のPDF96ページ辺り。



561 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 12:36:40 ]
>560
確認しました
確かに静的記憶域と同じと書いてありますね

562 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:43:49 ]
American National Standard Programming Language C
3.5.7 Initialization
Semantics
If there are fewer initializers in a list than there are members of
an aggregate, the remainder of the aggregate shall be initialized
implicitly the same as objects that have static storage duration.

563 名前:デフォルトの名無しさん mailto:sage [2009/11/24(火) 14:02:14 ]
おまいら静的変数と同じとか遠回しなこと言ってないで、
>>555 は間違いで
char c[2] = {0}の様に書いた場合 2 要素目以降は c 言語の
仕様として 0 にセットされる、とストレートに指摘しろyo

564 名前:555 mailto:sage [2009/11/25(水) 03:10:05 ]
いい加減なことをいってスマンカッタ。
ヽ(`Д´)ノ ウワァァァン
そんなこと言ったら厳密なObjective-Cの規格書なんて無いんだよう(グチグチ

565 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 03:10:53 ]
往生際悪すぎ

566 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 00:04:19 ]
とはいえ、身を委ねたくはない仕様だな。
明示的に初期化しておきたい。

567 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 00:30:36 ]
明示的に bzero() とか memset() すると冗長だと言って怒る人もいる(いた)から難しいね…

568 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 15:41:30 ]
こんな基本的な仕様を信用できないなら、ただの代入とかも信用ならんし
関数呼び出しなんて高度なものは余計使えないんじゃないか?

569 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 18:26:21 ]
コンパイラにバグがあったりするんだよ
そういう経験から、冗長かどうかはともかく
おまじないとして書いている処理というのはある

570 名前:デフォルトの名無しさん [2009/11/26(木) 18:28:35 ]
信用うんぬんじゃなくて、知らん人が多くて話がややこしくなるからだろ
みんな知ってりゃいいが >>567 みたいな理不尽なツッコミもありそうだし、
この流れみたいに話がこじれたらかなわん



571 名前:デフォルトの名無しさん mailto:sage [2009/11/26(木) 20:48:17 ]
じゃ信用できるコンパイラ先輩が作ってくださいよwwwwww

ってやる夫顔で言ってやればいいんだよ

572 名前:デフォルトの名無しさん [2009/11/27(金) 10:52:05 ]
クラス名からそのクラスのインスタンスを生成するにはどうするんでしょうか?
クラスオブジェクトの生成は結構見つかるんですけど、
Class cls = NSClassFromString(@"anyClassName");
クラスのインスタンス自体を生成するやり方を教えてください。

出来ない言語もあるけど、objective-cはいかにも出来そうですよね?
お願いします

573 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 10:54:21 ]
そこまで来てればあとはコンドーム一枚だぞ

574 名前:572 [2009/11/27(金) 11:05:28 ]
>>573
あれ?もしかして
id obj = [[cls alloc] init];
でいいんですか?
NSLogでのぞくと出来てるっぽいです。

class_createInstanceというのも見つけたけど上ので良いのかな。

575 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:05:20 ]
いいんです。

576 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 13:57:42 ]
こんなのも

Class class = NSClassFromString(@"AnClass");
SEL sel = NSSelectorFromString(@"aSelector");
id obj = [[[class alloc] init] autorelease];
[obj performSelector:sel];


プラグイン書くときはNSClassFromStringは便利だよね。
わざわざバンドルローダー指定する必要ないし。
NSSelectorFromStringの方はごくまれにしか使わないね。
AppleEventDispatchの実装部では使いまくってそうだけど。

577 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 16:21:30 ]
newとallocの違いが今イチ分からん。

578 名前:デフォルトの名無しさん mailto:sage [2009/11/27(金) 17:30:29 ]
>>577
俺も俺も
てか乳って使ったことない。

579 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:03:58 ]
+newは+alloc -initと同義

580 名前:デフォルトの名無しさん [2009/12/01(火) 18:38:18 ]
typedef enum {a,b} defA;

といった宣言をヘッダに記述し、これを他のクラスからimportして
defA a;

のように利用しようとすると、
"expected specifier-qualifier-list before 'c'"とエラーが
起きてしまいます。
どのように定義すれば良いのでしょうか。



581 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 18:43:26 ]
enum {
a,
b,
};
typedef NSInteger defA;

582 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 19:24:09 ]
>>580
ソース

583 名前:580 mailto:sage [2009/12/01(火) 20:55:30 ]
すいませんちょう単純な勘違いしてました。
他のヘッダが邪魔をしていて、importの前に書いたらうごきました。。

584 名前:デフォルトの名無しさん mailto:sage [2009/12/01(火) 23:11:37 ]
Objective-Cって、メソッド名ひとつ考えるのにも英語力を要求してくるな。
こりゃ、そんじょそこらのなんちゃってプログラマに扱えるしろものじゃねーな。

585 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 00:29:56 ]
なんちゃってプログラマでも簡単に使えるよ。英語さえわかれば。

586 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 00:50:29 ]
>>584
別に日本語ローマ字書きでもいいじゃん

587 名前:デフォルトの名無しさん [2009/12/02(水) 04:06:03 ]
辞書が存在していない時代だったらそう言えるかもしれないね。

588 名前:デフォルトの名無しさん [2009/12/02(水) 05:26:27 ]
辞書の歴史は紙の歴史より古いからなあ。

589 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 19:58:30 ]
DataWoTuika:id KonoIchini:idx omake:option

590 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 20:46:14 ]
引数がkonochincoとomekoに見える



591 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 21:10:19 ]
けしからん奴じゃ

592 名前:デフォルトの名無しさん [2009/12/03(木) 19:40:15 ]
NSStringにHTMLのソースが入ってるんですけど、
そこから<li>〜</li>の部分だけ抜き出したいと考えています。
ただ、それをどうやって実装すればいいのかが良く分からないです・・・。

今頭の中にある感じだと、<li>とマッチする最初の場所と
</li>とマッチする最後の場所を探して、その部分を抜き出すという方法なんですけど、
もっと簡単に正規表現みたいな感じでピュッと抜き出したりできないでしょうか?

593 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 20:19:18 ]
Google Toolbox for Mac の GTMRegex でも使え。

594 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 21:59:37 ]
まさかiPhone初心者スレで聞いてたやつじゃねーだろうな

595 名前:デフォルトの名無しさん mailto:sage [2009/12/03(木) 22:07:13 ]
>>592
とりあえず簡単にやるならスキャナ使えば?

NSString *hoge = "hoge <ol><li>foo</li><li>bar</li></ol>";
NSScaner *scanner = [NSScanner scannerWithString:hoge];
while (YES) {
 NSString* itemString;
 if (![scanner scanUpToString:@"<li>" intoString:NULL]) break;
 if (![scanner scanUpToString:@"</li>" intoString:&itemString]) break;
 NSLog(@"item = %@",itemString);
}

596 名前:デフォルトの名無しさん [2009/12/04(金) 00:52:37 ]
>>592
NSXML 使って XPath でピョッと

597 名前:デフォルトの名無しさん [2009/12/05(土) 22:45:14 ]
なんか、releaseしなきゃならん場合としないでいい場合の違いが良くわからんわ。
本のサンプルとかみても、retainしてるのに、どこにもreleaseがなかったり、allocして
autoreleaseも呼んでるのに、deallocでreleaseもしてたりとか、もうわけわかめ。
なんじゃこりゃ、そんなに神経質にならなくてもいいのか?

598 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:07:44 ]
カウンタ使ってメモリ管理するなら当然覚えないと、意味不明なバグに遭遇することしきり。
自分は Instruments の Leaks 使って、可視化されたメモリリークを見ながら試行錯誤して覚えたけど。

599 名前:デフォルトの名無しさん mailto:sage [2009/12/05(土) 23:09:06 ]
あと初心者は Build & 解析はかなり役に立つんじゃ。

600 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 03:36:39 ]
まずは
developer.apple.com/jp/documentation/cocoa/Conceptual/ObjectiveC/4objc_runtime_overview/chapter_8_section_2.html
を読まんといかんよ。

iPhone じゃなくて Mac のプログラムならガーベジコレクション ON
にして retain/release 忘れるという方法もあります。

ただ、
>サンプルとかみても、retainしてるのに、どこにもreleaseがなかったり、allocして
>autoreleaseも呼んでるのに、deallocでreleaseもしてたりとか、もうわけわかめ。
これは本が間違ってるんじゃないの?何の本かわからんから何とも言えんが。



601 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 06:55:11 ]
>>597
そんな本あるなら晒してみろよ

602 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:36:42 ]
初期化するインスタンスメソッドの他に、勝手にAutoreleaseするクラスメソッドも
あったりするからちょっとややこしい。

603 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:45:34 ]
(あるクラスの init メソッド内で、インスタンス変数に代入するオブジェクトを)retainしてるのに、
(init 内の)どこにもreleaseがなかったり、
(そのクラスを)allocして autoreleaseも呼んでるのに、
(そのクラスの)deallocで(インスタンス変数を)releaseもしてたり

と解釈するとしたら、まったく正しいコードけど

604 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 13:53:05 ]
>>601
サンプルはあくまでサンプル。アプリまるごと完全詳解みたいのならともかく。
Obj-Cに限らず、その他言語のO'Reilly本やMSDNでも、
サンプルソースと現実的に推奨されるソースは異なる場合は多い。
参照カウンタの説明でretainしたものをreleaseしてないなら問題だと思うけど、
多分、別の説明で使用されているサンプルがそうなってるんでしょ。

>>602
>勝手にAutoreleaseするクラスメソッド
コンビニエンスコンストラクタのこと?

605 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 14:10:04 ]
>>604 あぁ多分それ
俺もこの辺、よく迷うわ。propertyの宣下にもretainやassignの指定があるから、
宣言をよく確かめて使わないとかいけないとか気を使うのがちょっと大変。

便乗質問なんだけど、あるクラス(A)で動的にView(B)を作って(alloc & init)、
別のView(C)にaddSubView した場合って、Aで明示的にBをreleaseする必要
があるんだっけ? それとも、Cの解放時にBも勝手にreleaseしてくれる?



606 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:11:08 ]
当然あるよ。

607 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:34:14 ]
>>606
何が当然あるか? Aで明示的にBをreleaseする必要があるという意味あるか?

608 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 15:47:51 ]
ないあるよ

609 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 16:09:08 ]
hoge = [[Hoge alloc] init]; // 1
[foo addHoge : hoge]; // 2



[foo release]; // 1

よってメモリリークになる。
だから、autorelease か add 後に [hoge release]; の必要がある、筈。

610 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 16:37:49 ]
わかったある。謝謝



611 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 21:00:38 ]
>>609
エ?こうしとけばリークにならねえだろ?
-(void)dealloc {
...
 [mHoge release]; // 0
 mHoge = nil;
...
 [super dealloc];
}


612 名前:デフォルトの名無しさん [2009/12/06(日) 21:02:19 ]
そうか?

613 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 21:17:35 ]
そのdeallocは何をトリガーにして呼ばれるんだっちゅう

614 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:15:11 ]
>>611
だから、>>609はそうしろって書いてるじゃん

615 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:25:14 ]
自分が 609 だけど、foo が dealloc 時に hoge をリリースするのは、
addHoge: (addSubView:)には retain されてるから当然。

でもそれだと±1で、Hoge alloc init 時のカウント1をリリースされてないから、リークになる。

616 名前:デフォルトの名無しさん mailto:sage [2009/12/06(日) 22:44:59 ]
まぁ、init時にautoreleaseつけとくのが無難かな

617 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 00:14:08 ]
無難とかそういう問題ではなかろう。

618 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 00:45:02 ]
>602 >605
initほげほげ、copyほげほげ は retain されて、
それ以外のメソッドは autorelease されたのが返ってくる。

[obj method:a]
としたばあいに、obj が a がずっと必要なら method 内部で retain するし、
いらなかったらそんなことはしない

だから、自分があるオブジェクト a を release すべきかどうかは、
自分が呼んだメソッド内でどうなっているかとかは気にしなくてよくて、
単に自分がいらなくなった時点で release すればよい。

まあリリース足りなければメモリ食うだけだけど、
リリースしすぎは一瞬でクラッシュするので、
きちんと理解して書くか、NSZombie でチェックするか、
release しすぎないようにしてください。


619 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 01:19:21 ]
ウィーッス

620 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 13:31:55 ]
>>618
newほげほげも忘れないであげてください



621 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:53:50 ]
雑談はスレチだよね。チラ裏すまん。

Objective-Cのオブジェクトの所有権ポリシーって、
(C++におけるメモリ管理と)やることは本質的に同じでありつつ
保守効率が格段に上がる優れた機構ではあるとは思うけど、

Objective-Cってどんなもんだろってちょっとイジってオナりたいとき、
一通り理解するまでとっかかりで苦労するねぇ。
C++慣れしてると、余計なお世話に感じてしまうっていうか。
なんだか好きになれない。


622 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 17:59:43 ]
まあ、今はGCがあるし

623 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 20:34:51 ]
iPhoneではGCが使えないらしい...ゾ

624 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:15:56 ]
Objective-Cのメモリ管理3原則
1. alloc,copy,retain,newしたインスタンスはreleaseする必要あり
2. 1した覚えの無いインスタンスは勝手にrelesaeしてはいけない
3. 1してないインスタンスはどこかでreleaseされるので、保持したい場合はretainかcopy

625 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 22:28:22 ]
add したら直ぐ release して良いのかと思ってたら、そうじゃないんだね

626 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 00:43:52 ]
>>621
オブジェクトプール+手動の参照カウントってのは、大昔の手法だよ。
人頼みだとバグが多くなるし、保守効率も下がる。だからメモリ管理コードを
一々書かなくて済むGCやスマートポインタが主流になってる。
模したSmalltalkみたいに最初からGC付きなら無かった機構だから>>622が正解

627 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 09:22:55 ]
でも、iPhoneがGCは無効なんでしょう?
ここにいる皆さんは、GC派とリファレンスカウンタ派、どちらが多いのでしょうか?

628 名前:621 mailto:sage [2009/12/08(火) 11:17:45 ]
あ、すみません、iPhoneアプリ開発でObjective-C処女喪失したもので。
iPhoneはGC無いです。
(ただ、あったとしてもiPhoneはメモリ極小なので、autoreleaseさえ極力避けるべきと公式で指摘されています。)

>>624の規則だけですが、解れば便利な@propertyと@synthesizeも、
とりあえずちょっとイジってみようレベルの初見だと、
iPhone画面にHelloWorld表示するだけのソースすら、
「@property(nonatomic,retain)何この呪文、この入門書じゃソース解説にも記述無いし、
とりあえず詳細確認は後だな...あれ??実装でretainなんてしてなくね??なんで??
(ポチッ)ちょww動いたwwwけどHelloWorldのソースすらイミフwwww」
みたいな。

結局、入門書はHelloWorldで挫折、とりあえずちょっとイジるだけのつもりが、
公式ドキュメントを片っ端から読み漁って十分理解してから、
入門書のHelloWorldのソースを見直したのはいい思い出。。。

チラ裏に長文、本当にスマンかった。
最後に、InterfaceBuilderについて。
見た目だけでVB.NETくらい優しいお母さん的IDEだろうと思って触ると、火傷するね。


629 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:10:55 ]
iPhone だと Hello World 如きに property つかわにゃならん訳?

630 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 13:16:01 ]
>>628
なんの入門書を読んだか知らんが、それはその入門書があきらかに悪いな
iPhone でプログラムやるには、
(古めかしいとか批判はいろいろあるかもしれないが、実際問題として)
retain/release ができなきゃ話にならない。
わかったつもりで通過すると絶対に意味不明なクラッシュをはじめて
あとで泣く羽目になるのに、説明しないなんてありえない。

とにかく変な入門書を掴んで失敗でしたね。
あなたが公式ドキュメント読める人で良かったですが。

あと、Interface Builder はふつうの(?)と違って、
コントロールダブルクリックしてもメソッド追加できないので、
その辺戸惑うかも知れませんが、ビューとコントローラの独立性が
自然に高まるようになってるのはいいところだと思います。

.Net やさんで iPhone プログラムはじめたひとはみんな
そう感じるみたいね。
dotnetaddict.dotnetdevelopersjournal.com/dcacs.htm
とか。



631 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 18:47:31 ]
今更だけど、

> オープンソースの現状について、おそらくは予想外の知られざる事実を明らかにした。
> 『Smalltalk』対『Objective-C』では? Smalltalk がほぼ3倍のコード量で勝利している。
japan.internet.com/webtech/20090724/12.html

オープンソースの括りだから負けただけだよな?

632 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 12:41:07 ]
>>629
いらないよ。コードなんて1行も書かなくてもHello Worldって表示するぐらいはできる。
完全に入門書が悪いわ。アップルの配布してるPDFのほうが数倍マシ。

633 名前:デフォルトの名無しさん [2009/12/09(水) 22:34:49 ]
NSURLでwww.xxx.com/foo/boo/index.htmlのようなURLから
index.htmlを抜き取るようなメソッドってないですかね?
スキームやホスト、アンカーなどを返すメソッドは見つかったのですが、
ファイル名を返すのが見つからないです・・・

634 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:02:12 ]
NSString (NSStringPathExtensions) の
- (NSString *)lastPathComponent;

でも使え。NSPathUtilities.h に定義されてる。

635 名前:デフォルトの名無しさん [2009/12/09(水) 23:13:06 ]
>>634
ありがとうございます。
こんな便利なのがあったんですね。
というか、NSURLにもこのメソッドつけてほしいですねw

636 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:14:08 ]
10.6にはついてるみたいよ。

637 名前:デフォルトの名無しさん mailto:sage [2009/12/09(水) 23:25:55 ]
ほんとだ。
- (NSString *)lastPathComponent AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER;

638 名前:デフォルトの名無しさん [2009/12/14(月) 01:49:22 ]
NSStringをURLエンコーディングしたいと考えています。
例えば
てすと → %A4%C6%A4%B9%A4%C8
のようにしたいのですが

NSString *test = @"てすと";
[test stringByAddingPercentEscapesUsingEncoding:NSShiftJISStringEncoding];
NSLog(test);

のようにしても、
8C48B78C6
のように表示されてしまいます。これを%A4%C6%A4%B9%A4%C8のように表示するにはどうすればいいのでしょうか?

639 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 01:58:22 ]
NSLogが%をフォーマット文字と解釈して表示しちゃうせいだから気にしない

640 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:00:28 ]
1. ソースコード内に日本語文字列 @"にほんご" を書かない。
それによって出来た文字列がどうなるかの動作は未定義です!
(うまくうごくときもあるかもしれませんが、コンパイラのデフォルト設定が
次のバージョンでかわると一瞬でおかしくなる可能性があります。)
必ず Localizable.strings を使うようにしてください。

2. NSLog(test) というふうに書かない!NSLog の第一引数は
フォーマット文字列です。% があるとフォーマット指示だと解釈されます。
NSString* test = @"%@";
NSLog(test);
とすると、NSLog は %@ をフォーマットと解釈するために
スタック上に偶然あるポインタの先のオブジェクトっぽいものにアクセスして
異常終了しますよ!
必ず NSLog(@"%@", test)
としてください。



641 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:02:39 ]

NSString *test = @"てすと";
NSLog(@"%@", [test stringByAddingPercentEscapesUsingEncoding:NSShiftJISStringEncoding]);

2009-12-14 02:01:53.361 test[1467:a0f] %82%C4%82%B7%82%C6

642 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:03:33 ]
なるほどなるほど、勉強になります。
ちゃんと表記したらちゃんと表示されました。
今まで面倒くさがってNSLog(NSString変数)みたいに書いてましたが
今度からちゃんと書こうと思います。ありがとうございました。

643 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:09:44 ]
>>640
いつもの人乙

644 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:20:58 ]
>>640
1. だけど、
developer.apple.com/Mac/library/documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocLanguageSummary.html
によると、10.5 からは UTF-16 の文字列も大丈夫って書いてあるよ。
ただ、C のソースコードを何のエンコーディングで保存しているかと、
gcc の -fexec-charset, -finput-charset の設定によるので、
developer.apple.com/mac/library/documentation/DeveloperTools/gcc-4.2.1/gcc/Preprocessor-Options.html
僕は @"にほんご"は怖くて使う気になりませんが。

645 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:24:31 ]
>>638
というか URL のエンコーディングって ShiftJIS でいいんだっけ?
最近って真っ当なサイトなら UTF-8 じゃない? Wikipedia とか。

646 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 02:26:25 ]
RFCではUTF-8である"べき"とされているな

647 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 10:11:57 ]
10.5と10.6は、@"にほんご"は普通に使えてるなぁ。
ソースコードはデフォルトのままUTF-8。

648 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:41:01 ]
KVC で質問があります。class_addMethod で追加したセッタ、ゲッタが
valueForKey: から呼ばれないんですが、なぜでしょう?そういうもの?

サンプルコードは以下のとおりです (Obj-C 2 です)

#import <Foundation/Foundation.h>
#import <objc/runtime.h>
@interface Aho:NSObject
{
}
@property(retain) NSString*foo;
@end
@implementation Aho
-(id)getter
{
NSLog(@"getter:%@",NSStringFromSelector(_cmd));
}
-(void)setter:(id)obj
{
NSLog(@"setter:%@,%@",NSStringFromSelector(_cmd),obj);
}

649 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 01:41:49 ]
+(void)synthesizeSetterGetter:(NSString*)getterName
{
NSString*setterName=[NSString stringWithFormat:@"set%@%@:",[[getterName substringToIndex:1] uppercaseString],[getterName substringFromIndex:1]];
IMP getter=class_getMethodImplementation(self, @selector(getter));
class_addMethod(self, NSSelectorFromString(getterName), getter, "@:");
IMP setter=class_getMethodImplementation(self, @selector(setter:));
class_addMethod(self, NSSelectorFromString(setterName), setter, "@:@");
}
+(void)load
{
[self synthesizeSetterGetter:@"foo"];
}
@dynamic foo;
@end
int main(){
NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init];
Aho*aho=[[Aho alloc] init];
[aho foo];
[aho setFoo:@"bar"];
[aho valueForKey:@"foo"]; // ここで例外がでる
[aho setValue:@"bar" forKey:@"foo"];
return 0;
}

650 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 02:51:37 ]
valueForKey: はまずアクセサを探すはずなのにおかしいね。

@synthesize foo;
やって、

method_exchangeImplementations(class_getInstanceMethod(self, @selector(foo)), class_getInstanceMethod(self, @selector(getter)));
method_exchangeImplementations(class_getInstanceMethod(self, @selector(setFoo:)), class_getInstanceMethod(self, @selector(setter:)));

とかやるとちゃんと機能したけど、それは君の望むことじゃないか。



651 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:25:12 ]
class_addMethod(cls, sel, imp, types) の中の、types が間違ってるから。
typese は(リファレンスで確認してね)、"返り値", "self", "_cmd", "引数..." なので、
class_addMethod(self, NSSelectorFromString(getterName), getter, "@@:"); // ×"@:"
class_addMethod(self, NSSelectorFromString(setterName), setter, "v@:@"); // ×"@:@"
とやると動く。

652 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:38:59 ]
ついでに。+load で +synthesizeSetterGetter: を呼ぶとNSAutoreleasePoolがまだ
できてないタイミングなので、コンビニエンスコンストラクタを使うとリークする。
setterName = [NSString stringWithFormat:..]; の所。alloc + init + release を
使おう。それか、+load でやる代わりに +initialize で呼ぶとpoolが出来た後なので
コンビニエンスコンストラクタが使える。(分かった上でのサンプルならごめんよ)

653 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 11:41:32 ]
みなさんありがとうございます、
おかげでうまく行きました。
型のエンコーディングをわかってませんでした。
Pool の件もどうもです。まあ数個ぐらい
リークしてもよかんべ
という気持ちでしたが、いけませんね。

type encoding は method_getTypeEncoding
をつかった方がいいとも
職場で教えてもらいました...
マルチポストみたいになってすみません。



654 名前:572 [2009/12/19(土) 15:58:57 ]
質問させてください

中にNSMutableDictionaryのインスタンスを持っている独自クラスがあって
その中にどんなキーがあるかは不定です。

でそのインスタンスに対して
hoge.foo
のようにドットでプロパティを呼び出してNSMutableDictionaryのobjectForKeyにアクセスするようなことって出来ますか?

不定じゃなければそういうプロパティを作ってアクセッサを定義してやればイケそうな気もするけど・・

プロパティはコンパイル時の型チェックがあるのでダメそうな気がするんですが、見逃してることがあったら教えてください。


655 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 16:53:38 ]
できます。コンパイル時にウォーニングはどうしてもでるとおもいますが。
a.foo=b は[a setFoo:b] と、
b=a.foo はb=[a foo] と等価なので、
[a foo] をダイナミックに [a objectForKey:@"foo"] にかえてやればいいですが、
それには forwardInvocation: を使えばいいです。
www.mikeash.com/?page=pyblog/friday-qa-2009-03-27-objective-c-message-forwarding.html
とか参照。


656 名前:デフォルトの名無しさん [2009/12/20(日) 01:04:58 ]
NSStringの中にxxx:yyyみたいな文字列が入ってます。
これからxxx、またはyyyを返すようなメソッドってないでしょうか?
xxxの中には:は含まれず、yyyの中には:が含まれている可能性があります。
要するの最初のコロンと、それ以降に文字を分けたいのです。

657 名前:デフォルトの名無しさん [2009/12/20(日) 01:18:01 ]
rangeOfRegexとsubstringWithRangeでどうにかしました・・・

658 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 01:19:11 ]
NSScanner でググると良い

659 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 06:50:02 ]
>>658
で?

660 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 07:18:18 ]
>656-657と>659って同一人物なのか?

俺も普通にNSScannerでがりがりマッチング取ればいいだけ
だと思うんだが。



661 名前:デフォルトの名無しさん [2009/12/20(日) 11:48:34 ]
>>660
いえ、同一人物じゃないですw
回答くれた人にそんな失礼な返事しないですよw

NSScanner使ったことないので、調べてきます。
Objective-Cというかオブジェクティブ志向のプログラミングは初めて間もないんですが、
結構クラス調べるのは楽しいですね。もっといっぱい知りたい・・・

662 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:01:08 ]
いいのかい?
俺はノンケでも構わず食っちまう男なんだぜ

663 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 12:17:39 ]
いいよ

664 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:13:00 ]
>>661
NSScanner でももちろん出来るけど、その目的ならNSString の
-(NSArray*)componentsSeparatedByString:(NSString*)separator
でやる方が楽かと。後ろは、NSArray の
-(NSArray*)subArrayWithRange:(NSRange)range で取り出して、
-(NSString*)componentsJoinedByString:(NSString*)separator で戻してやればいい。

665 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 22:04:58 ]
>>655
メッセージ式で呼び出すときはウォーニングだけで済むと思うけど、プロパティ構文は静的に解決できないとエラーになると思う。だから、プロパティでやるのは無理なんじゃないかな。メッセージ式で書けばいい話だが。

666 名前:654 [2009/12/20(日) 22:36:59 ]
>>655
ありがとうございます
遅レスすいません

別のところ(C言語で文字列の置換)でつまっていて、詳しくテストしてない状況です。ウォーニングはでるけどできるってことですね。試してみます。

リンク先も見てみます。ありがとうございます

667 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:46:44 ]
キー値コーディングってどんなケースで使うんですかねぇ。
なんか普通のアプリで積極的に使う場面って想像つかないんですけど。
フレームワークの開発とかで使うのかな。

668 名前:デフォルトの名無しさん [2009/12/21(月) 23:13:04 ]
次の人が答えます

669 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:14:48 ]
KVC はそれほど自分で直接呼ぶもんじゃないと思いますが、
Cocoa のいろんな部分 (KVO,バインディング) でランタイムが統一的に
オブジェクトを弄れるための下支えになってます
例えば、ソースコードで -foo と -setFoo: を定義しておくと
nib ファイルの中からビューをコントローラのキー foo に
バインドできますが、その間の通信は KVC でやってるわけです。

670 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:24:18 ]
>>667
値が変更された通知が欲しいときに色々と使えるだろ。
たとえば、テキストフィールドが編集されたときに何かをしてみたり。

それから、特定のスクリプトを処理するときに、コードがかなり短くなる。
たとえば、自力でXMLをパースする、みたいなときは、大幅にソースが簡単になる。

まぁ、まずは日本語ドキュメントでも読め。
developer.apple.com/jp/documentation/Cocoa/Conceptual/KeyValueCoding/



671 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:31:30 ]
結構奥が深そうですね...ちょっとずづでも探ってみまする。

672 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:32:42 ]
>>667
一々 IBOutlet と Action をおいてセッターとゲッターを作るより、Interface Builder でどうこう出来る分生産性が上がる。

673 名前:デフォルトの名無しさん [2009/12/22(火) 22:36:38 ]
すみませんが、質問になります。
Objective-CからCのqsortを呼ぶ事ってできるのでしょうか?
第4引数をどうすればよいのか、途方にくれてます。
よろしくお願いします。

674 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 22:57:53 ]
Cそのまんまだろ。それとも オブジェクトのメソッドでも突っ込む気か?
その場合は関数でラッパーすれば良いだけだけど。

675 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:18:33 ]
qsort_b って関数もあるぞ

676 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 23:52:54 ]
>>673
C の配列をソートするのなら、C そのままでしょ。
Objective-C のオブジェクトは、C配列にいれないほうがいいです。
NSString* a[10]; とか余程でなければ誰も使わないと思います... よね。
NSArray つかって、ソートするときは、
sortedArray... とかいうメソッドが一杯あるので。


677 名前:デフォルトの名無しさん [2009/12/22(火) 23:58:01 ]
>>674
ありがとうございます。そのまんまなんですね。
関数へのポインタを@selectorでとかやってたら、混乱してしまいました。

>>676
そうですか。Objective-Cが独特なんで、なるべく標準を使いたいと思ったりするんですけど、
やっぱり駄目ですかねー。

678 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:03:51 ]
IMP とかそこら辺を学ぶと幸せになれるかも。

679 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:06:47 ]
iPhone様々ですか?

680 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 00:08:51 ]
>>877
Objective-C は C のスーパーセットだから。
C++ だって C でできる事はそのまま何でも出来るでしょ。

>そうですか。Objective-Cが独特なんで、なるべく標準を使いたいと思ったりするんですけど、やっぱり駄目ですかねー。
う〜ん、他の環境から Mac へ GUI だけ移植してるんなら、そういうのも判らなくないですが、
Mac / iPhone 用に一から書いてるなら諦めて Cocoa の使い方覚えたほうがいいと思います。
どうせ method の引数に文字列なら NSString, 配列なら NSArray を渡さないといけない事が
しばしばあるので、どうせ使い方覚えないといけなくなりますし。




681 名前:654 [2009/12/24(木) 02:08:22 ]
すいません。すれ違いなんですけど,
多分ここの人が詳しそうなんで、質問させてください。
xcodeでC言語の勉強をしてて、日本語の処理でつまったので教えてください。
#include <wchar.h>
int main(void)
{
wchar_t str[] = L"日本語だよ";
printf("%s\n", str);
printf("%S\n", str);
printf("%c\n", str);
printf("%C\n", str);
wprintf(L"%s\n", str);
wprintf(L"%S\n", str);
wprintf(L"%c\n", str);
wprintf(L"%C\n", str);

return 0;
}printfでマルチバイトのも文字列をあつかうにはどうすれば良いのでしょうか?上のコードは全部文字化けか出力できませんでした。xcodeのコンパイラって基本的にはgccなんですよね?その辺の情報を調べて上のように試してみたんですけど。

基本的にはNSStringをつかうので必要ないといわれればそれまでなのですが。
お願いいたします

682 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 04:05:53 ]
なんでココなんだよ。
自分でスレ違いって分かってるんだからC言語のスレ行けよw
そっちじゃいけない理由でもあるのか?

683 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 07:43:02 ]
gcc の設定の問題で、Obj-C とも Mac と関係ない話だから、適切なところへ行ってくれ

684 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 12:58:46 ]
はあ・・・低能さんって・・・

685 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 20:32:37 ]
なんだか文法がいちいち長ったらしくて萎えるんですけど..
文字列比較すんのに
if ([a compare:b] != NSOrderedAscending) {
 :
}
とか、めんどくせーし、英語に慣れてないとぱっとみどう比較してんのかわからんちゅーの。
VBだったら
if a >= b then
 :
end if
ちょーシンプル。ほんと萎えるよ。英語が分る人には読み易いのかもしんないけどさ。はぁ...挫折しそ

686 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 20:45:32 ]
>>685
そのVBの記述だとエンコーディング考慮出来ないじゃんw

C Stringで出来る所はそうすればいいし。そうでないところは
Foundationでやればいい。どちらも取れるんだから。

687 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 02:16:37 ]
>>685
英語の勉強になると思って頑張ってください。
物事こころの持ちようですよ。
挫折したければ挫折しても良いんだし。

688 名前:デフォルトの名無しさん [2010/01/11(月) 16:13:44 ]
例えばオブジェクトAがあるオブジェクトBを中で生成(alloc)して帰す場合、そのオブジェクトBをreleaseするのはオブジェクトAの責任なんですよね?

で、そのオブジェクトBを配列で返すようなメソッドを書く場合
return [[NSArray alloc] initWithObjects:objectB, nil];
としてしまうと、だれが、このNSArrayをreleaseするのかってなっちゃいますよね?

つまり、この場合NSArrayもオブジェクトAのメンバ変数に保持しないといけないってことでしょうか?

689 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 18:31:22 ]
つ autorelease

690 名前:デフォルトの名無しさん [2010/01/14(木) 19:55:11 ]
return [[[NSArray alloc] initWithObjects:objevtB, nil] autorelease];
とするか、
return [NSArray arrayWithObjects:objectB, nil];
とすべき。



691 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 08:48:56 ]
関係ないけど、s無し単数形の -[NSArray initWithObject:]もあるよ。

692 名前:デフォルトの名無しさん [2010/01/16(土) 21:17:35 ]
最近 Objective-C 2.0 を始めたんですが、ガベコレについて質問です。

ガベコレって retainCount が 0 になったインスタンスを自動的に解放してくれるだけで、
retain, release によるメモリ管理は必要なんですよね?
NSAutoReleasePool でメモリ管理をしないでよくなった、という理解で良いでしょうか。

693 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 21:35:39 ]
全然違う。

ルートとなるNSAppから芋づる式に参照されてる(到達可能な)オブジェクトを保持し、
関連が無くなったオブジェクトを自動的に始末するシステムです。

journal.mycom.co.jp/special/2007/objectivec/002.html

参照カウントは使ってない。

694 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 21:39:39 ]
C++は0xとか模索されてて鋭意進化中だけど、Objective-C は 3.0 が出来るとしたら、どんな拡張になるのかな?

695 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 22:34:26 ]
特にこれといって欲しい機能もないしなあ。
名前空間くらいか。

696 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:17:01 ]
無名関数、ラムダ式、ジェネリックは欲しい。

ちゅうかC++ 0x のコンパイラなんぞ実装するベンダーあるのかね。
IDE込みで考えると、かなり大変そうだけ。

697 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:21:47 ]
詳しくは知らんのだが、ブロック構文はラムダ式の代わりにはならんの?

698 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:27:04 ]
>>696
>無名関数、ラムダ式、

無名関数とラムダって違うの?
Blocks のクロージャじゃダメなの?

699 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:48:20 ]
クロージャなんてものがあるのか。知らなかった。これ使いまくろ。

700 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:52:45 ]
>>696
>ジェネリック

動的束縛な言語にジェネリックって必要か?



701 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:55:07 ]
ジェネリック・プログラミングも、カテゴリを利用して出来るんじゃないの?

702 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:55:52 ]
Blocksなんて機能あったんだ? 荻原本にも書いてないやんけ!

703 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:59:03 ]
Dyna本にも書いてないよな、何故か知らないけど。

704 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 06:02:50 ]
本にのってないのは、block は snow leopard からの機能だからでしょ。

Objective-C の拡張というよりは C そのものの拡張という
位置づけにしたいらしいよ、Apple は。
まあ多分ほかにどこも採用しないから、
実質 Objective-C の機能という認識になるとおもわれるが...

705 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:29:38 ]
>696
フル実装はしばらくかかるかもしれないけど gcc も VC も既に機能の取り込みを始めてるし、
C99 と比べれば段違いだと思われ。

706 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:30:28 ]
木下本が出たのは雪豹後だったはず。

707 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:17:37 ]
>>706
違う。

708 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:19:15 ]
>>706
あれは マイコミジャーナルに長期連載されてたのを
まとめただけだから仕方がないね

せめて 2.0 ランタイムについて一章だけでも付け加えてくれたらよかったんだが、
あれを買って 10.6 で実際にやってみようとしてはまってるひとが
ときどきこのスレやら新 mac 板の Cocoa スレにでますね

709 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 15:54:05 ]
あるクラスが持つプロパティの属性をassignにするべきか、retainにするべきか、copyにするべきかで悩んでしまいます。
結局わからないから、とりあえずassignにしとけってことが多いです。
独立性の高いクラスの場合はretainで保持した方がいいのかなと思ったりするんですが...

何か指針みたいなものってあるんでしょうか? それとも経験的な勘でみなさん決めてらっしゃるんでしょうか?

710 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 16:28:23 ]
最終的にどのタイミングで release されるか、を考えておくべき。



711 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:22:22 ]
やっぱりオブジェクト型のプロパティはretainしてdeallocでreleaseしといた方が確実なんですかねぇ。
autoreleaseされたプロパティを渡される可能性もあるし。
となるとassignの使いどころって、数値型や文字列とかのプリミティブ型に対してってことになっちゃいますかねぇ...
copyは...ゔーん、まいっか。

712 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:31:54 ]
>>711
delegate や target など、 retain にすると循環参照でリークする人が
出そうなものは少し考えたうえで assign にしたりする。

知らぬ間に内容を変更されたくないオブジェクトで、 retain で受けると
mutable string を渡したあとで中身を変更する人がいるかもしれないな、
などと心配する暇があるときは copy。

面倒なときはどっちも retain にしといて使う側が気を付けることにする。

713 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 19:08:42 ]
あぁdelegateね、これは確かにサンプルとかみてもassignにしてあるのが多いですね。
まだ覚束ないですが、少し自分なりに整理できそうです。ありがとうございしました。

714 名前:デフォルトの名無しさん mailto:sage [2010/01/23(土) 21:09:44 ]
Xcodeって「¥」と「¥」(バックスラッシュ)って区別されてんのね。どおりで¥n入れても改行せんわけだわ。

715 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 00:09:40 ]
XCode が、じゃなくて、標準のユニコードがそうなだけ


716 名前:デフォルトの名無しさん mailto:sage [2010/01/24(日) 17:01:56 ]
C と c は区別したーい

717 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 08:38:46 ]
>>709
Google の Style Guide だと NSString なプロパティはとりあえず copy にしとけってことになってる
google-styleguide.googlecode.com/svn/trunk/objcguide.xml?showone=Properties#Properties

718 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 13:16:24 ]
Google は最早 Apple の敵だが、参考にしよう。

719 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 18:17:39 ]
敵判定って空しくなるだけ。

720 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 20:30:17 ]
Googleは、アップル製品をアク禁できるんだから、Googleに戦う気があったら勝負にならない。



721 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:30:28 ]
- (int)hoge:(int)a;
みたいなメソッドを、performSelector:withObject: のように(SEL)と引数を与えて動かす方法ってないのかな?
int を NSNumber にするしかない?

722 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:31:34 ]
>>721
面倒くさいが、NSInvocation を作って動かすとか。
id invocation = [NSInvocation invocationWithMethodSignature:
 [piyo methodSignatureForSelector:@selector(hoge:)]];
int arg = 1;
[invocation setArgument:&arg atIndex:2];
[invocation invoke];
int rtn;
[invocation getReturnValue:&rtn];

723 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:34:24 ]
ターゲット設定してなかった。[invocation setTarget:piyo] をやるか、
[invocation invokeWithTarget:piyo];

724 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 17:59:29 ]
>>722-723
NSInvocation って以前見かけて、結局使い道が分からなくて放置してたクラスだけど、色々調べてみます。
ありがとう。

725 名前:デフォルトの名無しさん [2010/01/31(日) 23:32:14 ]
>>720
Macユーザのシェアがごっそりなくなるから無理だろうな。


726 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 22:47:01 ]
それはぶっちゃけ言うほど痛くない

727 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 02:14:29 ]
Google使えなくなったら大部分は乗り換えるだけ。

728 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 04:10:35 ]

Google社員にもMac愛好家くさるほどいんのにそんな誰得の展開になるわけないだろ
使えなくしたらグーグルの勝ち〜とか発想が幼稚すぎるわ

おまえらなんでそんなに頭悪いの
とてもプログラミングできるような頭じゃないと思うんだがなんでこのスレにいんの
 

729 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 05:14:53 ]
キミ凄いね

730 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 07:58:20 ]
社員の趣味と企業戦略を一緒くたにして話す奴も大概頭悪いと思う



731 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:09:37 ]

なんでプログラマやデザイナやミュージシャンとかクリエイティブなやつらにMac使いが多いか考えたことないだろ
Macを除外する企業戦略とかニートや低脳厨房の発想
 

732 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:20:13 ]
理由は唯一つ
お洒落だからですが何か

733 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 21:55:20 ]
プログラマはねーよww

734 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:03:39 ]
(クリエイティブな)ブログラマってことだろ

735 名前:デフォルトの名無しさん [2010/02/02(火) 22:54:44 ]
>>731
デザイナーとミュージシャンにMacが多い理由は、割れの巣窟だったから。
写真屋とか、9割が違法コピーって言われてた。

736 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 22:57:15 ]
開発環境がそっくり入ったUNIXマシンなんだからプログラマが選んでも
何の不思議も無いと思うが

737 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:39:43 ]
Googleの中の人とか、Ruby on Railsの人とか、イケテルプログラマはMac使いが多いね。

738 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:45:06 ]
Linus ってイケてたっけ?

739 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 23:45:47 ]
PDFをネイティブにサポートしてるからPDFのドキュメントも読み易いしね。
あとLeopard以降は64bitアプリそのまま使えるから、64bit版OSインストール
し直しなんて手間も要らない。

740 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:07:30 ]
MacはUNIXなんだから、ドザじゃないまともなプログラマはMac使う



741 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:21:08 ]
犯罪者が必死だな。

742 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:42:40 ]
あらやだ
くやしいんですね
だいじょうぶですよ
がんばって知能つけましょうね

743 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 00:46:49 ]
カンファレンスや勉強会に行くと、もう過半数がMacだなぁ。
発表者なんか下手すると9割くらいMac。サポートがしょぼいはずのJava系ですら半分がMac。
個人的に、2kgを超えるモバイルマシンなんざありえねぇと思ってるので、正直理解できん。Airは中途半端すぎるし。

744 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:01:37 ]
個々は GNUStep, Cocotron もふくめた Objective-C のスレですよ!
Mac の話題なんてとんでもない!ぷんすか

745 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:03:36 ]
StepStone ってどうなったんだっけ?

746 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 02:09:05 ]
>>745
NeXT が Objective-C の権利を買い取ったあともしばらく存続してたけど、
消滅したらしい
en.wikipedia.org/wiki/Stepstone

747 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 10:40:00 ]
プログラマは、技術的に面白い物は全部触ってみたくなる人種だ。
OSXとLinuxとWindowsが全部動くマシンがMacしかない以上、
他に選択肢は無い。
電話もiPhone持ちが大半だが、加えてAndroidも持ってたりするぞ。

748 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 14:03:23 ]
複数持つだけ
全部動くからという理由じゃ選択しないよ

749 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 20:20:42 ]
一人暮らしでもマシンが複数台あってLANでつながってるのが当たり前だと思うんだが。

750 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 20:23:22 ]
最近は仮想マシンでも十分な性能が出るから、うちはハードは1台だよ。



751 名前:デフォルトの名無しさん mailto:sage [2010/02/03(水) 21:08:12 ]
はーどうしたどうした

752 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 13:31:58 ]
>>750
新しい機種を導入するたびに前のは破棄してるのか

753 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 15:11:30 ]
>>752
中古屋に売ってます

754 名前:デフォルトの名無しさん mailto:sage [2010/02/04(木) 16:40:22 ]
CocotronでWin用のアプリ作ってみたひといませんか?
実用的ならうれしい。

755 名前:デフォルトの名無しさん [2010/02/06(土) 22:18:35 ]
初心者です。質問させてください。
stringWithCStringを使うと、コンパイル時に
warning: ‘stringWithCString:’ is deprecated
がでました。

stringWithCStringの代わりに何を使うのがよいですか?

756 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 22:26:32 ]
Xcodeのヘルプメニューからたどれるドキュメントを読みましょう。
またはメソッド名 (stringWithCString:) のところでOption+ダブルクリック

757 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:20:28 ]
初心者はこのスレに来るな

758 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:31:21 ]
え〜っ、なんで?

759 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 00:35:52 ]
>>752
他人にあげたり、捨てたり、死蔵したり

>>755
>stringWithCStringの代わりに何を使うのがよいですか?

stringWithCString:encoding:

760 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 14:33:01 ]
複数のPCがあっても仮想マシン導入して、前のは捨てるのか。
どのくらいのペースで買い替えてるんだろう。

うちはしょっちゅう買ってるから1人暮らしなのにPCは常時7〜8台あるわ



761 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 18:16:51 ]
もはやPCを買うことが目的になってるな。

762 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 20:04:59 ]
>>758
冗談でつ
でも質問が下らな過ぎてちょっとうんざりした。最近はドキュメント読まないゆとりが増えたのかなー。

763 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 01:52:54 ]
>>762
うちはこないだ新人向けに調べ方の調べ方マニュアルを作ったな。
よくあるのがググる先生に頼りすぎて、ヘルプや付属ドキュメントを読まないとか。

764 名前:デフォルトの名無しさん mailto:sage [2010/02/08(月) 02:42:50 ]
調べ方マニュアルじゃなくて、
調べ方の調べ方マニュアル、なのか?それはメタだなぁ...


765 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 12:59:27 ]
メタメタにしてやんよ

766 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 14:39:02 ]
お願いします。

767 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 15:28:42 ]
メメタァ

768 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:00:04 ]
うわあああああぁぁぁああああ!!!

769 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:32:17 ]
バルス

770 名前:デフォルトの名無しさん mailto:sage [2010/02/09(火) 18:44:24 ]
ふぅ..



771 名前:デフォルトの名無しさん [2010/02/15(月) 02:45:53 ]
Objective-C入門3日目の初心者です。
フォルダのファイル一覧を、とりあえずコンソールに出してみようとしています。
本やWebを参考にして次のようなコードを書いたのですが、エラーがありうまくいきません。
添削していただけないでしょうか。

初心者は来るなってことだったのですが、
Objective-C初心者はどのあたりにいけばよいでしょう?

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
NSString *rootpath = @"/Public";

BOOL result = YES;
NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath:rootpath];
int i;
for (i = 0; i < [contents count]; i++) {
NSString *name = [contents objectAtIndex: i];
NSString *path = [dirPath stringByAppendingPathComponent:name];
BOOL isDir;
NSLog(@"\n%@", path);
}
return 0;
}


772 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 03:13:08 ]
#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {

NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
NSString *rootpath = [NSHomeDirectory() stringByAppendingPathComponent : @"Public"];
NSArray *contents = [[NSFileManager defaultManager] directoryContentsAtPath : rootpath];

for (NSString *name in contents)
NSLog(@"%@", [rootpath stringByAppendingPathComponent : name]);

[pool release];

return 0;
}

773 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 09:47:18 ]
一見して良いように見えるが、どんなエラーがでるの?
僕らだってエスパーじゃないから、「エラーがでます」じゃわからんよ。
コンパイルエラーならコンパイルエラーを書き写してもらわんと困るし、
実行時のエラーならどんなエラーなのか書いてください。
「エラーがでます」とだけここに書き込むのは、
エラーが出て、エラーメッセージを解読する気がないという気がします
それではプログラムは上達しませんよ。

単に ~/Public になんもファイルがないだけでは、と言う気がします。

774 名前:デフォルトの名無しさん [2010/02/15(月) 10:58:25 ]
>>772
おお。ありがとうございました。
早速実行したところ、
warning: 'directoryContentsAtPath:' is deprecated (declared at /Developer/SDKs/MacOSX10.6.sdk/System/Library/Frameworks/Foundation.framework/Headers/NSFileManager.h:164)
と警告が出てビルドできませんでした。
これは、どこを見ればよいのでしょう?
というか、NSFileManager.hの164行なんだと思うので、
見たところ、

- (NSArray *)directoryContentsAtPath:(NSString *)path DEPRECATED_IN_MAC_OS_X_VERSION_10_5_AND_LATER;

という行でした。
NSString *rootpath = [NSHomeDirectory() stringByAppendingPathComponent : @"Public"];

NSString *rootpath = [[@"~" stringByExpandingTildeInPath] stringByAppendingPathComponent : @"/Public"];
などいくつか試したのですが、どうしてもうまくいきません。


775 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 11:56:23 ]
英和辞書をお奨めする

776 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:29:09 ]
雑談と初心者いじりしかやらないよねMac系の開発スレって

777 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 12:57:21 ]
このレベルから教えるのは正直きっついな

778 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 13:17:01 ]
警告だからコンパイルは一応通ってるんじゃないの?
OS 10.5以降は非推奨メソッドだから使わないでねって警告なんじゃないの?

779 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:01:11 ]
>>774
コンソールを表示してみ。

> ビルドできませんでした。

嘘付かないでね。

780 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:10:21 ]
>>776
これがわからないってことは、リファレンスどころか警告すら読めてないってことでしょう。
その状態でObj-Cで開発やるのはかなり厳しいよ。

で、「(やる気があるのなら)英和辞書をお奨めする」ってことなんだけどな。

それとも警告出るたびに聞きに来るの?



781 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 14:31:03 ]
そういうレスだけは饒舌だなw

782 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 15:24:34 ]
まぁまぁ^^;

783 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:49:27 ]
むしろ
「Cocoaスレに行け」とか
「Mac プログラミングスレに行け」
って言われなかったのが奇跡だな…
# Foundation Framework ネタはどこが適切なんだろ…?

784 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 18:58:27 ]
内容ジャンル的にはここでも問題ないと思うが、このレベルの無知無知初心者を相手にするのも大変だろう。

785 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:04:11 ]
deprecatedはもうすぐなくなるよってこと。今はまだある。
これはすごく親切な警告。

なのでdirectoryContentsAtPath:をopt+ダブルクリックしてみる。リファレンスが表示される。

Special Considerations
Because this method does not return error information, it has been deprecated as of Mac OS X v10.5. Use contentsOfDirectoryAtPath:error: instead.

って書いてあるので代わりに
contentsOfDirectoryAtPath:error:
を使う。


786 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 19:05:44 ]
調べ方教えたんだから同じ内容ではもう来るなよ

787 名前:デフォルトの名無しさん [2010/02/15(月) 19:44:43 ]
>>775-786
まあそうおっしゃらずに、
もうすこしおつきあいいただけないでしょうか。

さきほどのファイル一覧は、あらためてプロジェクトを作り直したら、問題なく動きました。
一覧も取得できました。

失敗したときは、まだトライ&エラーの段階なので、
ひとつのプロジェクトのソースを全選択して、
消しては新しいソースを貼りつけて、
実行していたのです。

ソースじたいは変更していないのですが、
ともあれお騒がせしました。

で、次なのですが、いちおう辞書片手に読んでますけど、
(1)デバッグ中に変数に代入されているデータを見る方法
(2)コンソールコマンドから、テキストエディタとかのGUIアプリケーションを実行できるのか?
の2点を教えていただけないでしょうか。

(1)ブレークポイントを設定してみるものの、
そのデータが具体的になになのか、確認するには、
どこのメニューでどれを見ればよいのでしょう?

(2)ソースは次のとおりで、実行すると、デバッガコンソールでいろいろ表示したあと、
(gdb)というモード? になり、期待していたように、
テキストファイルをテキストエディタで表示はしませんでした。

そもそもこういう方法で、外部のアプリケーションを起動できるんでしょうか?
アドバイスお願いします。


788 名前:デフォルトの名無しさん [2010/02/15(月) 19:46:20 ]
#include <Foundation/Foundation.h>

int main() {
NSTask *noteTask = [[NSTask alloc] init];
NSMutableArray *noteArgs = [NSMutableArray array];

NSString *path;
path =[[NSHomeDirectory()
stringByAppendingString:@"Public/tmp.m"];

// configure note
[noteArgs addObject: path];
[noteTask setLaunchPath: @"/Applications/TextEdit.app/Contants/MacOS/TextEdit"];
[noteTask setArguments: noteArgs];

// launch applications
[noteTask launch];

// wait applications
return 0;
}


789 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 20:03:01 ]
>>787
(1)
ブレークポイントで停止したら適当な変数名にカーソル合わせる
またはデバッガコンソールで p コマンドか po コマンド使う
p は C の基本データ型、 po は ObjC のオブジェクトの内容を表示する
p intVar
po object
po [object value]
てな具合
あとは help コマンドで調べて

(2)
>[noteTask setLaunchPath: @"/Applications/TextEdit.app/Contants/MacOS/TextEdit"];
Contants じゃなくて Contents な
「いろいろ表示」された中に手掛かりが書いてある、ちゃんと読めよ

790 名前:デフォルトの名無しさん mailto:sage [2010/02/15(月) 22:17:46 ]
親切だなぁ



791 名前:デフォルトの名無しさん [2010/02/15(月) 22:27:00 ]
>>789
ありがとうございました。


792 名前:デフォルトの名無しさん [2010/02/18(木) 23:36:01 ]
Objective-C気持ち悪い

793 名前:デフォルトの名無しさん [2010/02/18(木) 23:48:27 ]
テキストフィールドに入っている文字のバイト数が一定値以上だったらエラーを出したいのですが

NSLog(@"OK %d", MAX_TITLE_LENGTH-strlen([[tfThreadTitle text] cStringUsingEncoding:NSShiftJISStringEncoding]));

if(MAX_TITLE_LENGTH-strlen([[tfThreadTitle text] cStringUsingEncoding:NSShiftJISStringEncoding])<0)
{
  NSLog(@"haitta");
  return;
}

その一定値を超えてもこのif文に入ってくれません。
NSLogで数値の確認をしてみたのですが、-2となっているのにも関わらず、
直後のif文の判定を素通りしているようです。何が原因なのでしょうか。。助けてください。。

794 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:12:12 ]
>>793
NSStringのUTF8Stringを使ってconst char *型の文字列の先頭ポインタを取得して使う。

795 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 01:55:56 ]
>>793
strlen の戻り値は符号なしだから、> の左辺はマイナスにならないよ。
if (strlen(...) > MAX_TITLE_LENGTH)
と書くべき。C 言語からやり直しだね。  

796 名前:デフォルトの名無しさん [2010/02/19(金) 02:25:05 ]
>>794-795
ひゃあ、ありがとうございます。
strlenの戻り値はunsignedなんですね。。。
ありがとうございました。

797 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 06:08:41 ]
NSString*を返り値として返す関数があるのですが、

NSString* func()
{
NSString *str = [[NSString alloc] initWithFormat:@"%d", 1];
return str;
}

例えばこういう場合って、どうすればいいのでしょうか?
releaseしたらreturnできませんし、returnしたらreleaseできませんよね?

798 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 06:25:45 ]
>>797
まさにそういう時のためにautoreleaseがあるのだよ

799 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 08:16:29 ]
お〜autorelease!!
ありがとうございます!
[[[NSString alloc] initWithFormat:@"%d", 1] autorelease];
でいいんですよね!ありがとうございますっ!

800 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 08:23:43 ]
この場合stringWithFormatもあるけどな。



801 名前:デフォルトの名無しさん [2010/03/03(水) 23:55:05 ]
iPhone作りたいんですけど、なにせwin野郎なんでMac全然勝手が分かりませんw
とりあえずiPhone用の開発環境揃えたいんですけど、お勧めセット一式誰かお願いできますか?
あと、windows系とのネットワークファイル共有って簡単にできるでしょうか?

802 名前:デフォルトの名無しさん [2010/03/03(水) 23:57:28 ]
まだ、ソフトもハードも無いので、勧めセット一式はソフトハードセットでお願いできるとありがたいです。

803 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:00:59 ]
スレ違い。死んでくれ。

804 名前:デフォルトの名無しさん [2010/03/04(木) 00:01:26 ]
Objective-C気持ち悪い

805 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:03:08 ]
じゃあ Objective-C は代わりにおじさんがやっておくわ

806 名前:デフォルトの名無しさん [2010/03/04(木) 00:04:27 ]
Appleて、現代的な言語作ってないんだよな

807 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:05:47 ]
ObjC が最強過ぎるからな

808 名前:デフォルトの名無しさん [2010/03/04(木) 00:11:26 ]
Objective-Cなんて糞は正直触りたくない

809 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:15:36 ]
代わりに俺が触っておくから、寝てて良いよ

810 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:19:24 ]
お前に触られるぐらいなら死んだ方がまし



811 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:21:25 ]
いや、お前を触るわけじゃねえw

812 名前:デフォルトの名無しさん [2010/03/04(木) 00:25:01 ]
>>803-811
マジ頭おかしいんじゃね、お前ら
樹海にいって首つって死ね

813 名前:デフォルトの名無しさん [2010/03/04(木) 00:26:21 ]
iPhone作りたいんですけど、なにせwin野郎なんでMac全然勝手が分かりませんw
とりあえずiPhone用の開発環境揃えたいんですけど、お勧めセット一式誰かお願いできますか?
あと、windows系とのネットワークファイル共有って簡単にできるでしょうか?
まだ、ソフトもハードも無いので、勧めセット一式はソフトハードセットでお願いできるとありがたいです。


814 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:26:55 ]
>>802
ソフトは登録してダウンロードするだけだよ
ハードは現行機種なら何でも良いけど、メモリ多めの方が何かと良いよ

815 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 00:34:15 ]
>>801-813
このスレ荒らして何の得がある……

816 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:28:26 ]
>>813
iPhone作りたいなら中国の工場に就職しろ

817 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 01:57:20 ]
>>813
こんな質問してるくらいだから、多分無理なんだろうな。
下手に教えないほうがいいぞ。手を出し始めたらこのスレがくだらない質問であふれかえってしまう。

818 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 02:48:17 ]
>>813
MacProとCinemaDisplayオススメ
あとFinalCutStudioとLogicかな。
なんやかや結局揃えるハメになるので最初にまとめて買っておくが吉。
ノートで十分とか言う奴がたまにいるが、デスクトップだとアプリのビルド時間が断然早く作業効率が非常に良い。
Windowsとの共有は簡単にできるよ。

819 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 13:30:42 ]
とりあえずインテルのMac mini買えばあとはオンラインで全部そろう
それでエミュレーションで動かしてから考えるといいんじゃないかな

820 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 15:41:41 ]
>>818
どもどもです、とりあえずそれでいってみようかと思います。
リソースの編集もMac側でやった方が効率いいですかね?
コードだけそっちで作ってみようかと目論んでいたのですが・・・



821 名前:デフォルトの名無しさん mailto:sage [2010/03/04(木) 16:16:18 ]
>>820
どっちでもいい。
あと最初にしっかりガンマ特性や色温度の管理うぃやっておけば、
実機で印象が変わったりジャギーが目立つ等の問題も避けられる。
(ある程度までは、だけど)

822 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 17:22:02 ]
>>818
アプリのビルド時間が早くなるって、どういうことだ?

823 名前:デフォルトの名無しさん mailto:sage [2010/03/05(金) 18:21:28 ]
マシンの性能差だろ。

824 名前:デフォルトの名無しさん [2010/03/07(日) 01:53:25 ]
iPhone用のアプリを作っていますが、NSDictionaryの使い方で悩んでいます。

以下の1行で、プログラムの実行が異常終了してしまいますが、理由がわかりません。どなたかヒントをいただけませんか?

sControls = [NSDictionary dictionaryWithObjectsAndKeys: display1, card1, display2, card2, display3, card3, display4, card4,nil];

ただし、
IBOutlet UILabel *display1;
IBOutlet UIButton *card1;
IBOutlet UILabel *display2;
IBOutlet UIButton *card2;
IBOutlet UILabel *display3;
IBOutlet UIButton *card3;
IBOutlet UILabel *display4;
IBOutlet UIButton *card4;
です。

最初は、card1〜card4のいずれかがnilで、その結果NSInvalidArgumentExceptionが起きているのでは?とデバッガで値を検査しましたが、そうではありませんでした。


825 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 01:55:31 ]
デバッガのコンソールメッセージは以下の通りです。
よろしくお願いします。

2010-02-24 00:15:27.446 XXXXXXXXXXX[69972:207] *** -[UIRoundedRectButton copyWithZone:]: unrecognized selector sent to instance 0x3b14a50
2010-02-24 00:15:27.447 XXXXXXXXXXX[69972:207] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[UIRoundedRectButton copyWithZone:]: unrecognized selector sent to instance 0x3b14a50'
2010-02-24 00:15:27.449 XXXXXXXXXXX[69972:207] Stack: (
29258843,
2531099913,
29640763,
29210230,
29062850,
28990666,
28990186,
28988857,
10209,
3209026,
9269,
2692555,
2730422,
2718516,
2700927,
2728033,
37354841,
29043584,
29039688,
2694677,
2731951,
9184,
9038
)


826 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 03:14:30 ]
一旦MutableDict 作って、一個ずつKey と Objectを設定してみろ。

827 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 03:44:06 ]
>>824
keys must conform to the NSCopying protocol

828 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 19:35:03 ]
メソッド名を良く読めって話だな。割と罠ポイントだとは思うがw

829 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 02:05:24 ]
もうvisual studioもeclipseも触りたくない。

830 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 10:14:51 ]
そんなあなたにNetBeans



831 名前:デフォルトの名無しさん [2010/03/20(土) 09:23:49 ]
live.nicovideo.jp/watch/lv13400073

832 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 09:43:57 ]
ニコ厨死ねよ

833 名前:デフォルトの名無しさん mailto:sage [2010/03/20(土) 23:17:05 ]
口半開きってやっぱダメだな

834 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:03:17 ]
あの、ポインタに対して使う * っていうのは、内容を複製して渡すのでしょうか?

例えば、NSTextField* field があったとして、

isnumber(*[field.text UTF8String])

としたとしますよね。この場合、[field.text UTF8String] だけで渡そうとすると
ポインタだからダメ、みたいな感じで怒られますが、*を付けるという事は
その中身を渡すという事ですよね?

中身を渡すというのは、そのポインタが指す中身を複製してその関数に渡して
いるのでしょうか?

質問がうまく伝わっていなかったらすみません。どうも中身を渡すというのが
どういう意味なのかがよく分からなくて…。Objective-C 以前に C が分かって
いないのでおかしな事を言っていたらすみません。

835 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:05:36 ]
すいません、NSTextField -> UITextField の間違いでした。

836 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:54:43 ]
>>834-835
Cは(Objective-Cも)値渡しだから、ポインタだろうがなんだろうが
渡すときは常に中身がコピーされる。
ポインタを渡したときは、コピーされるのはポインタの値だから
中身はコピーされないな。
中身を渡したら中身がコピーされるだろう。

837 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 18:56:42 ]
>>836
中身っつうか、渡したものが常にコピーされるってことね。
分かりにくかったらすまん。

838 名前:デフォルトの名無しさん mailto:sage [2010/03/22(月) 20:18:47 ]
>>834
>あの、ポインタに対して使う * っていうのは、内容を複製して渡すのでしょうか?
合ってる、けど「中身」が何であるか勘違いしないように

[field.text UTF8String] は char * を返すんだが、この場合の中身は
先頭の1文字であって文字列全体じゃないからな

839 名前:834 mailto:sage [2010/03/23(火) 16:42:01 ]
>>836
ありがとうございます。

ポインタを渡したらそのポインタの値がコピーされるという事ですよね。

>>838
ありがとうございます。

そうそう、そこも不思議だったんですよね。実際に isnumber はどう
処理しているのでしょう?アドレスに1ずつ足していきながら NULL 文字
がくるまでを文字列と判断するのでしょうか?

ソースを探したんですが見つからなくて…。

840 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 17:52:23 ]
isnumber が扱うのは「(所謂)文字列」ではなく「文字」だよ。



841 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:07:21 ]
>>839
>アドレスに1ずつ足していきながら
「文字列」(char *、つまり連続した文字の先頭へのポインタ)を受け取る関数についてはその通り
ただ isnumber は >>840 が言うとおり「文字」(char)を受け取って、
その1文字が数字どうかを判別する

842 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 22:59:21 ]
>>840, 841
げげっ!そうなんですね、という事は、何らかの NSString が数値として
解釈できるかどうかは、何か別の方法で判定しなくてはいけないという事ですね。

Objective-C というよりは Cocoa っぽい話題で申し訳ないですが、皆さんは
ある NSString が数値として解釈できるかどうかはどの様に判定していますか?

843 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 23:19:09 ]
NSNumberFormatter ?

844 名前:デフォルトの名無しさん mailto:sage [2010/03/23(火) 23:20:20 ]


845 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 00:04:21 ]
>>843
NSNumberFormatter 使ってみたんですが、例えば aiu6 とかが蹴られるのは
いいんですが、6aiue とかやると解釈されちゃうんですよね。

厳密モードみたいなものがあるのかと思ったんですがないし…。

正規表現とかでやるしかないんでしょうか。と思ったら Cocoa には正規表現を
するためのクラスがないんですね、ガーン…。困った…。

846 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 06:32:26 ]
ogrekit

847 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 12:31:40 ]
-[NSNumberFormatter getObjectValue:forString:range:error:]
が使えるんじゃないかな。

自分は libc の strtol() 系で事足りてるから使ったことないけど。

848 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:49:40 ]
sscanf()のObjective-C版が欲しいと思ったことありませんか?

UTF-8が処理出来るとかなり違うかと思うのですが。

849 名前:デフォルトの名無しさん mailto:sage [2010/03/24(水) 22:51:07 ]
NSScanner

850 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 01:53:35 ]
>>847
やってみたんですが、やはり 0aiu みたいなものは解釈されてしまうみたいですね。
しょうがないので、数値かどうかを判断する関数を作り、とりあえずそこで数値と
判断したものだけ実際に数値に変換させる様にしました。

どうもおさわがせしました。でもなんか楽しいですね、Objective-C を頑張って
覚えたいです。



851 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 13:48:33 ]
>>850
range:

852 名前:デフォルトの名無しさん mailto:sage [2010/03/25(木) 15:06:47 ]
-getObjectValue:...より簡単な-numberFromString: は使ってみたか?
自分の環境では6aiueはNULLを返す。
厳密モード的な動作は -setLenient: で切り替えられると思うが,NSNumberFormatterのAPIページくらい目を通したか。
ただ6aiueの解釈には影響ないみたいだが。
あるいはgetObjectValue:...を使いたいなら >>650 の通りだな。

853 名前:834 mailto:sage [2010/03/25(木) 18:27:08 ]
>>852
ありがとうございます。

もちろん numberFromString は使ってみたのですが、普通に
数値として返ってきてしまうので困っていました。

setLenient も指定してみましたが、効果がありませんでした。

やり方がいけなかったんですかね…。家に帰ってもう一度やってみます。

854 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 09:20:21 ]
shouldNotImplement: や notImplemented: って、
may not respond to '-notImplemented:'
ではなくするには何をインポートすれば良いんだ?

#import <objc/Object.h>
やっても意味無いようだけど。

当方OSX 10.6。


855 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 12:25:59 ]
>>854
- (id)hogehoge {
return [self notImplemented:nil];
}

こうなってんじゃないの?
子クラスで -hogehoge を再定義すれば

856 名前:デフォルトの名無しさん mailto:sage [2010/04/02(金) 15:27:23 ]
>>855
? いや、
- (void)hoge {
[self notImplemented: _cmd];
}
をエラー無くビルドしたいんだけど。notImplementedされてるクラスを云々じゃなくて、自分でnotImplementedしたいんだ。
今クラスクラスタ作ってるところで。

857 名前:デフォルトの名無しさん mailto:sage [2010/04/03(土) 02:16:08 ]
>>856
ああすまん
自分で空の -(void)notImplemented: を定義すりゃいいんじゃね

858 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 00:45:54 ]
NSArray* array = [NSArray arrayWithObjects:@"a",@"b",@"c",NULL];

みたいな、オブジェクトをカンマで区切って複数指定できるメソッドって、
定義する側ではどう書くのでしょうか?

もしや、カンマで区切って繋げると自動的に NSArray に変換してくれたり
しているんでしょうか??

859 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 01:45:11 ]
可変長引数でググレカス。

developer.apple.com/mac/library/qa/qa2005/qa1405.html

あと Foundation クラスの実装例が見てみたいなら CF や libFoundation のソースでも読んどけ。
www.google.com/codesearch/p?#_rn0kgFhkQA/redir/sope/55519/url_tgz/sope-4.5.4-nevermind-r878.tar.gz|EGqseItem4o/sope/libFoundation/Foundation/NSArray.m

860 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 02:30:46 ]
先生、「可変長引数」という単語を知らない人はどうなりますか…。

という冗談は置いておきまして、ありがとうございました。

ただ、可変長引数という単語で検索してもほとんどきちんと解説している
サイトってないですね…。「va_list」とか「va_start」とか一体何者なのか
分かりませんし…。まぁとにかくそのあたりから調べてみる事にします。

ありがとうございました。



861 名前:デフォルトの名無しさん [2010/04/05(月) 12:54:31 ]
これだからゆとりは

862 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 13:26:03 ]
ダイナミック本ってどうなの

863 名前:デフォルトの名無しさん mailto:sage [2010/04/05(月) 15:20:27 ]
索引付いてないし装丁も粗いし、Webの奴読んでりゃ良いと思うよ。

864 名前:デフォルトの名無しさん mailto:sage [2010/04/06(火) 18:52:14 ]
最近のプログラマーはやった物勝ちなんだな

865 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 14:39:34 ]
objc2 runtime 関数 const char *class_getIvarLayout(Class cls); について質問です。
この layout というのは、どういうものなのでしょうか?
ソースコードを調べていくと、objc-runtime-new.h に
class_t 構造体->class_rw_t 構造体->class_ro_t 構造体->uint8_t *ivarLayout
となっていて uint8_t*型だとわかりましたが、何の値を示すものなのでしょう?
よろしくお願いします。


866 名前:865 mailto:sage [2010/04/14(水) 15:44:41 ]
解決には至っていませんが… objc-layout.m に GC につかうもの、っぽいことが
書いてあります。が、いまいちどうなっているのかよく分からないので、
ご存知の方がいらしたら、ご教示お願いいたします。
/**********************************************************************
* Object Layouts.
*
* Layouts are used by the garbage collector to identify references from
* the object to other objects.
*
* Layout information is in the form of a '¥0' terminated byte string.
* Each byte contains a word skip count in the high nibble and a
* consecutive references count in the low nibble. Counts that exceed 15 are
* continued in the succeeding byte with a zero in the opposite nibble.
* Objects that should be scanned conservatively will have a NULL layout.
* Objects that have no references have a empty byte string.
*
* Example;
*
* For a class with pointers at offsets 4,12, 16, 32-128
* the layout is { 0x11, 0x12, 0x3f, 0x0a, 0x00 } or
* skip 1 - 1 reference (4)
* skip 1 - 2 references (12, 16)
* skip 3 - 15 references (32-88)
* no skip - 10 references (92-128)
* end
*
**********************************************************************/

867 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:29:58 ]
コメントを読んだ感じだと、
あるオブジェクトが他のオブジェクトを参照するのに使っているポインタ領域が
どのオフセット位置にあるのかを表しているように読める。
例として書いてある { 0x11, 0x12, 0x34, 0x0a, 0x00 } だと、
各々の上位ニブル(= 4 ビット)分スキップしてと下位ニブル分だけワードを読むことになっているので、
まず、 0x11 で 1 ワードスキップして 1 ワード見る
次に 0x12 で 1 ワードスキップして 2 ワード
0x3f で 3 ワードスキップして 0xf = 15 ワード
0x0a で現在のワードから(= 0 ワードスキップ)10 ワード見る。
0x00 = '¥0' で終端。
1 word = 4 byte = 32 bit で、オフセットが 4, 12, 16, 32-128 の位置のワードが表されている。
このメモリレイアウトに従ってメモリ領域を見ればオブジェクトの参照関係がわかる。
という感じかなあ。 Ivar は Instance Variable の略じゃないかと。
GC については最近出た本を参照。

868 名前:865 mailto:sage [2010/04/15(木) 20:40:07 ]
>>867
「ニブルの上位下位」のところがよく分からなかったんですが、なるほど、
そういう意味だったんですね。分からなかった「ニブル」の意味も何となく
分かりました。ありがとうございます。
もう一つお教えください。GC についてですが、最近新しい本が出たのでしょうか?

869 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 20:56:05 ]
> 868
byte : 8 bit
nibble: 4 bit

これはbyte -> bite (かじる)にひっかけて
「ちょこっとかじる」という意味のnibbleをbyteの半分を
指す様になった。 ほとんど冗談の様なネーミング。 


870 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:06:47 ]
じゃあニブルはニップルをかじってるのか



871 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:06:49 ]
英語版のwikipediaによると、bite->byteにひっかけて
nybbleとスペルしたり、かならずしも4bitではなくて
5bitや6bitに使われた場合もあったそうだ。 また、
用語の起源はIBMのメインフレームらしい。

en.wikipedia.org/wiki/Nibble


872 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:09:17 ]
byte -> bite じゃなくて
bite -> byte だよね
bite が byte の語源

873 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:13:07 ]
継手のニップルってそのまま形から来てるのか

874 名前:865 mailto:sage [2010/04/15(木) 21:14:47 ]
>>869
レスありがとうございます。
その話、何かで見たことがありました!完全に忘れていましたが・・・
おかげでもう忘れない気がします(笑)

875 名前:865 mailto:sage [2010/04/15(木) 21:16:46 ]
あれ、書いてるうちに… みなさん、ありがとう。

876 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:49:00 ]
>>868
GC の本っていうのは ttp://www.amazon.co.jp/dp/4798025623 のこと
オブジェクトの参照関係が GC でどう使われるかに興味があるんだったら
読んでみるといいかもしれない

ところで byte = 8bit じゃない計算機もあったよね
そのために 8bit を明示するときは octet と言ったり

877 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 13:30:37 ]
ちくびと聞いて

878 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 13:04:34 ]
+(void)hoge;

じゃなくて
+hoge;
って宣言を見かけたんだが、これはなんだ?

879 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 13:16:13 ]
int hoge;

880 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 15:17:16 ]
+ (id)hoge;
だよ。



881 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 21:32:43 ]
hage

882 名前:865 mailto:sage [2010/04/19(月) 09:30:11 ]
>>876
カメレスでごめんなさい。本の情報ありがとうございます、手に入れて読んでみます。

883 名前:デフォルトの名無しさん mailto:sage [2010/04/24(土) 22:04:45 ]
@interface MyObject : NSObject
+ (void)hoge;
- (void)piyo;
@end
@implementation MyObject
+ (void)hoge { NSLog(@"hoge");}
- (void)piyo { NSLog(@"piyo");}
@end

@interface MyMyObject : MyObject
@end
@implementation MyMyObject
+ (void)hoge { NSLog(@"hogehoge");}
- (void)piyo { NSLog(@"piyopiyo");}
@end

@interface MyMyMyObject : MyMyObject
@end

となってて、MyMyMyObject で祖父クラスのメソッドを呼ぶ時って、
@implementation MyMyMyObject
クラスメソッドの場合はコレで良いとして、
+ (void)hoge {
[[[self superclass] superclass] hoge];
}
インスタンスメソッドの場合は、IMP取得くらいしかないのかね?
- (void)piyo {
IMP imp = class_getMethodImplementation([[self superclass] superclass], _cmd);
(*imp)(self, _cmd);
}
@end
supersuper とか無いし。

884 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:24:01 ]
>>883
親でover-rideされてるにも関わらず祖父を直接見るなんて、そもそもの設計が大間違いなのでは?
と Obj-C 初心者が言ってみる。

885 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 10:40:05 ]
メッセージングでやる場合。
- (void) piyo {
struct objc_super superSuper = {self, [[self superclass] superclass]};
objc_msgSendSuper(&superSuper, _cmd);
}
あとは、class_replaceMthod 等でメソッド入れ替えなども可。

886 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 12:46:27 ]
[[self superclass] superclass]とかやると、
MyMyMyObjectのさらにサブクラスを作ったときにハマるな。

887 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 16:42:25 ]
[self superclass] == [super superclass] であることを知って驚いた14の春

888 名前:デフォルトの名無しさん [2010/05/01(土) 11:17:15 ]
 

889 名前:デフォルトの名無しさん mailto:sage [2010/05/01(土) 11:55:50 ]
>>887
ほんとだ。なんでこうなるの?

890 名前:デフォルトの名無しさん [2010/05/01(土) 20:43:49 ]
superclassメソッドをサブクラスでオーバーライドしないかぎり、[self superclass]とやっても、[super superclass]とやっても、呼び出されるメソッドは同じ。
さらに、[self superclass]も[super superclass]も、レシーバーはselfになる。
詳しくは、Objective-Cのruntime APIを見てください。



891 名前: [―{}@{}@{}-] デフォルトの名無しさん mailto:sage [2010/05/06(木) 17:31:55 ]
>>883
祖父クラスが基本的なメソッドを提供していて、子クラスでオーバーライドしたんだけど
孫からも基本的な処理へのアクセスが必要だというような場合は祖父クラスで hoge を
basicHoge として別名でも提供しておくという Smalltalk 流の作法で済ませられない?

892 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 00:40:25 ]
スレ違いかもしれませんが質問ですm(_ _)m

NSData型の変数に4バイト、例えば
0x00 0x00 0x00 0x7F
と入ってる場合、これをInt型の127に変換するには
どうすればいいのでしょうか?

893 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 01:37:17 ]
int a = CFSwapInt16(*(SInt32*)[data byte]);

894 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 01:39:00 ]
ミスった

895 名前:892 mailto:sage [2010/05/09(日) 12:02:34 ]
回答&ヒントありがとうございます。
int a = CFSwapInt32HostToLittle(*(SInt32*)[data bytes]);
で、まだ意味はぼんやりとしか分かってないですが、
無事期待の動作が得られました。

896 名前:デフォルトの名無しさん [2010/05/18(火) 10:45:41 ]
質問です。iPhone用プログラムを書いていますが。

NSInteger index = random() % count;
NSInteger index2 = random() % count;
while(index2 == index) {//同じにならないように
NSInteger index2 = random() % count;
}

とやって、二種類のランダムな数字を発生させようとしていますが、
何度かランダム数を発生させるとプログラムがストップしてしまいます。
なにがいけないのでしょうか。どなたかご教授願います。


897 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 10:55:35 ]
NSInteger index = random() % count;
NSInteger index2 = random() % count;
while(index2 == index) {//同じにならないように
NSInteger index2 = random() % count; // このindex2と前のindex2は別物
}


一つ目のindex2と二つ目のindex2は別物です。 


while(index2 == index) {//同じにならないように
 index2 = random() % count; // 宣言しない
}

としてください。


// 変数が隠されてしまっている とか警告出ませんでした?

// 変数スコープとかその辺の話も調べてね

898 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 10:55:36 ]
日本の未来が心配です。

899 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 11:06:39 ]
あまりにもあんまりな問いで最初何が駄目なのかわからなかった

900 名前:896 mailto:sage [2010/05/18(火) 11:35:51 ]
>>897
うぉぉ、当たり前ですよね。コピペしてたのが間違いでした。
ホントにあんまりな質問に回答して頂き、ありがとうございました。感謝感激です。
あ〜恥ずかしい。



901 名前:デフォルトの名無しさん [2010/05/18(火) 14:20:24 ]
すみません、質問させてください。
iPhone用アプリのプログラムを最近始めた初心者です。
<質問>
iPhoneから外部DB(postgreSQL)に接続する手法がわかりません。

色々調べましたがピンと来なかったのですが、Object-Cから直接DBConnect
するような方法は無いのでしょうか?
XCode自体、初心者なのでよくわからないのですが、
1. Ruby?を利用する
2. java+JDBCを利用する
のような感じになるのでしょうか。
ヒントだけでも教えていただけたら助かります。
宜しくお願い致します。

902 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 14:46:11 ]
ググレカス

903 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 15:11:38 ]
この質問前どっかで見た気がする

904 名前:デフォルトの名無しさん [2010/05/18(火) 17:10:02 ]
質問です。
UIScrollViewで画面より大きい画像を表示しているとき、画面に写っているのは、
ScrollView上でどの位置(座標)なのかを取得するにはどうしたら良いでしょう?
検索をしても、タッチした座標の検出しかわかりませんでした。
よろしくお願いします。


905 名前:デフォルトの名無しさん mailto:sage [2010/05/18(火) 17:31:23 ]
スレチ。

906 名前:デフォルトの名無しさん [2010/05/21(金) 15:12:54 ]
基本的なことなのですが、いろいろ調べてもわからなかったので質問させてください。
あるファイル(A.m)から、別のファイル(B.m)のクラス( -(void)test{...} )にアクセス
するにはどうしたら良いのでしょうか?
B.hをA.mにimportして、A.m内で[self test]とやってみましたが、警告が出てうまく
ビルドできませんでした。
低レベルな質問ではありますが、よろしくお願いします。


907 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 15:35:06 ]
>>906
自分も初心者だけど、A.m内でBのインスタンスを作ってないんじゃ?
A.m内で[self test]ってしても、selfはAのインスタンス自身を参照するよ。
testメソッド(objCはメッセージだっけ?)を持っているのがBのインスタンスだからできないんじゃないかな。

908 名前:906 mailto:sage [2010/05/21(金) 15:47:12 ]
>>907
ありがとうございます。できました。
今まで何となく使ってた、selfの意味をようやく理解しました。


909 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:47:32 ]
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
@try {
ここで例外発生。
}
@catch (NSException * e) {
NSLog(@"%@ @catch in %@", e, NSStringFromSelector(_cmd));
@throw;
}
@finally {
[pool release];
}

で、上位のレベルで例外を受ける時、例外は pool に登録されるせいで、@finally 中の [pool release]; で解放されちゃって、
上位のレベルで例外を触るとバッド・アクセスになる。

例外発生時に pool がメモリリークするから @finally に入れたのだが、逆にこんな問題が出てくるとは。
NSAutoreleasePool を作らないという選択肢以外に、何かリークしない上手い対処法無いかな?
@throw; しないで、上位には NSError で渡すとか考えてるけど。

例外処理とか今まで殆ど触ったこと無いから、勝手が分からない。

910 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 00:07:47 ]
>>909
例外処理に悩むならException Programming Topics for Cocoa
くらいは嫁。その中の
Exception Handling and Memory Managementに、まさしく
あなたが悩んでいることについて書いてある。ピックアップすると

The simplest is to refrain from releasing local autorelease pools in @finally blocks
もっとも簡単な方法はfinalyブロックでローカルなプールを使うなってこと。



911 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 00:18:05 ]
>>910
申し訳ない。その辺の文章は全て和訳されてるとばかり。

developer.apple.com/mac/library/documentation/cocoa/conceptual/Exceptions/Tasks/HandlingExceptions.html
おお、素晴らしい。savedException を使います、成る程ね。

ありがとうございました。

912 名前:910 mailto:sage [2010/05/25(火) 00:22:43 ]
じゃあどこでpoolをreleaseするのか不安に思ってるかもしれないので、
追記。
Autorelease poolはスタック状のデータ構造になっていて、
最上位でないAutorelease poolが解放されると、それより上の
内側のpoolおよびそれに登録されたオブジェクトはリリースされる
(Memory Management Programming Guide for Cocoa;
Scope of Autorelease Pools and Implications of Nested Autorelease Pools 参照)
Cocoa/Objective-Cでinitとreleaseの対応は金科玉条 (破るとすなわちメモリリーク) だけど、autorelease pool自体はinitとreleaseが厳密に対応していなくても許容される…みたい。下層のpoolがreleaseされるのが前提だけど。

913 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 13:51:57 ]
@interface MyAutoreleasePool : NSObject {
NSAutoreleasePool *_pool;
NSPointerArray *_buf;
}
- (void)throwToOuterPool:(id)obj;
@end

@implementation MyAutoreleasePool
- (id)init {
self = [super init];
if (self) {
_pool = [[NSAutoreleasePool alloc] init];
_buf = [[NSPointerArray alloc] initWithOptions: NSPointerFunctionsZeroingWeakMemory];
}
return self;
}

- (void)throwToOuterPool:(id)obj {
[_buf addPointer: [obj retain]];
}

- (void)dealloc {
[_pool release];
for (id obj in _buf) [obj autorelease];
[_buf release];
[super dealloc];
}
@end

こんなん作って、@catch 中で [pool throwToOuterPool: e]; するコトにしたよ。

914 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 20:50:57 ]
Objective-Cの逆コンパイラってありますか?

915 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:14:33 ]
何悪いこと企んでるんだ?

916 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 10:14:52 ]
今月で販売が終了してしまうプリンタのドライバを逆コンパイルしたい。

917 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 13:42:00 ]
Objective-CってコンパイルしちゃうとCと区別付かないよね
Objective-C特有の関数呼び出しが多数現れるけど

918 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:00:29 ]
ObjC で書かれたドライバなんてあるの…

919 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:27:40 ]
馬鹿はレスしなくていいです

920 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 19:56:19 ]
>>917
ObjC 特有の関数呼び出しが多数現れるから、コンパイルしても C と区別付くよ。



921 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 20:44:33 ]
>>920
そうじゃなくて、>914へのヒントだよ

922 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 20:46:36 ]
ObjC のメッセージ呼び出しを解釈するデコンパイラが有っても良いと思うよ?

923 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 22:12:38 ]
code-dump.sourceforge.net/

924 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 02:21:48 ]
今まで色々書いてきて萩原本の内容を一通り制覇したけど、「分散オブジェクト」だけは未だどう利用すればいいのか分からない。
どういう処理に使ったとか、実践的・実用的な利用例があったら教えてくれ。

925 名前:デフォルトの名無しさん mailto:sage [2010/06/05(土) 02:22:16 ]
経験談とか。

926 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:32:29 ]
すでにコンパイルされたiPhoneのアプリを
c#のように解析することはできますか?

927 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:04:48 ]
>>926
>c#のように

具体的に何がしたいの?

928 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:54:53 ]
>>927
ソースみて参考にしたいのです
特に規約とかないようなので

929 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:05:25 ]
Objective-C なら結構動的に動いてる部分があるので
逆コンパイルもそれなりな形にできそうだけど
いかんせん逆コンパイラが作られるほど有名な言語でもないというのが

930 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:07:21 ]
>>928
デコンパイルしたいってことか。
残念ながら iPhone アプリのデコンパイラは知りません。
アプリの動きを知りたいなら、Instruments でカスタム
DTrace スクリプトを書くのが一番良いと思います。



931 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:18:44 ]
>>928
コーディング規約なら一応あるよ。

Coding Guidelines for Cocoa
developer.apple.com/mac/library/documentation/Cocoa/Conceptual/CodingGuidelines/CodingGuidelines.html

あと、 /Developer/Examples の中にサンプルソース(TextEditとか)が
入っているので、参考になるかもよ。

932 名前:931 mailto:sage [2010/06/06(日) 15:20:47 ]
Cocoaスレと間違えた。めんご

933 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 15:42:47 ]
規約がないってのは
リバースエンジニアリングを禁止する規約がないって意味でしょ

934 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 16:10:28 ]
見落としてるだけだろ

935 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 22:38:46 ]
いや、パクる気満々だな

936 名前:デフォルトの名無しさん [2010/06/08(火) 07:45:09 ]
いえ、解析してそのゲームでチートしようと思ってます

937 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 08:02:20 ]
ageんな死ね。

938 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:25:24 ]
Objective-Cでは、厳密にprivateやpublicと明示的に記述し、スコープ分けしないのでしょうか?
入門書を何冊か読んだのですが、どれもインスタンス変数のスコープ分けをしていないので、気になっています。

939 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:27:26 ]

@interface AClass : NSObject
{

940 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 17:01:09 ]
そのあたりに言及してるのは荻原本ぐらいじゃないかな



941 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 17:26:05 ]
@privateでもKVCとかでアクセスできるし
プライベートであるという表明だけは出来るけど
静的チェックは甘いよね。

942 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 10:11:59 ]
>>940-941
ありがとうございます。
自分はJavaやってから始めたので、クラス内でしか使わない変数を隠蔽していないと
どうも気になってしまって…。

荻原本は読みました。解説はしてるのですが、以降の章のサンプルコードでは積極的に
使ってませんよね。>>941さんがおっしゃるように、
「スコープ分けしてもKVCでどうせアクセスできるんだから、細かい事は気にすんな」
って事なのでしょうかね。

943 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 12:11:55 ]
表明するのは大事だよ

通常アクセスならエラーが出るし、
迂闊に触ってしまうことへの注意喚起も出来るから
それで慣れている人は続ける方がいいよ


Appleのやり方も色々だよね。
昔から有るクラスはコメントで「privateだ」って書いてあったり
idな型不明のオブジェクトに隠蔽したり
@privateで宣言したり。

944 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 13:06:02 ]
>>943
なるほど、ありがとうございます。
書いている方が安心できるので、書く事にします。
少しでも単純なバグを減らせるなら、これを書くぐらいなんとことないですしね。

id型で思い出しましたが、参考書はかなりid型を使っていますが、Objective-Cは動的型結合があるのでid型で書いた方が、何かと都合が良いのでしょうか。
「ここは絶対hoge型でしょう」みたいな箇所でid型を使うのは、Javaのような静的型付け言語に慣れ親しんでいた私の身には抵抗がありまして…。
「ごちゃごちゃ言う前に慣れろ」と言われれば、それまでなんですけど、ハイ…。

945 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:24:18 ]
荻原本持ってるなら64ページに静的な型について書いてあるよ。
「明確な指針はないので好きにすれば良い」みたいなことが書いてある。

俺はクラス型を指定すると、コンパイル時に警告を出してくれるメリットがある
のでどんどん使っていけば良いと思うよ。
ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて
id型になっているということがJavaとは違うので注意。

id型の代わりにクラス型を指定したせいでデメリットが生まれることはあまり
ないと思われる。

946 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 14:35:23 ]
>>945
ありがとうございます。書いてました。申し訳無いです。

>ただ、コンパイル時には静的な型チェックを行ってくれるが、実行時にはすべて
>id型になっているということがJavaとは違うので注意。

この違いは大きいですね。注意します。ありがとうございました。

947 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 15:10:05 ]
>>943
WebViewはちょっと面白いよね。
@privateでWebViewPrivateクラスのインスタンス変数を持ってるだけだし、
WebViewPrivateクラスの実装とかはなぜかWebViewDataにある。


948 名前:デフォルトの名無しさん [2010/06/11(金) 16:03:43 ]
CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、
NSLog("%O", index);
としましたが、ポインタコンパチブルなんたらと怒られました。
何が間違っているのでしょうか?と質問しようとして、

よく見たら、1つ目の引数のポインタが型違うやんみたいなことを言われました。
NSLog(@"%O", index);
としたら、うまく行きました。自己解決しました。ありがとうございました。

以前にもこういうミスがありまして、こういうミス起きないようにするには
どうすればよいでしょうか。変な質問ですがよろしくお願いします。

949 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:50:47 ]
文字列の前には@を付けると頭に叩き込むしかないんじゃないかな。

950 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:30:49 ]
>>948
一度遭遇したエラーや警告を、その原因、対処方法とともに意識して憶えていく努力をする。



951 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:37:59 ]
次に948は、
CFIndex型の変数indexに、どんな値が入っているか見ようと思うのですが、
printf(@"%O\n", index);
としましたが(ry

952 名前:948 [2010/06/12(土) 14:48:06 ]
みなさんアドバイスありがとうございます。

>>949
「あっと驚くNSString」これで頭に叩き込もうと思います。
頭に叩き込んでいたら怪我をしてしまいまして、これから病院に行ってきます。

>>950
そうですよね。がんばります。

>>951
次は無いようにしたいですね。

そこで新たな質問ですが、
NSLog(@@"%O", index);
のところでエラーが出ます。
原因はなんでしょうか?


953 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 14:56:21 ]
バカかお前は。

954 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 23:08:40 ]
バカの相手するのもなんなんだが、log って打って補完すれば NSLog(@""); って補完してくれて "" の中にキャレット動かしてくれるぞ

955 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 06:40:53 ]
>log って打って補完すれば NSLog(@"");

俺、べつのバカだけど、そうなんだ!べんりだなー

956 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:18:32 ]
すみません 非常に初歩的で申し訳ないんですが、iphone ipadのプログラムがしたいと思い、windowsに>>15
www.gnu.org/software/gnustep/experience/Windows.htmlの通りインストールしたんですが、shellのコマンドがわかりません

というかみなさんMACでやってるんですか?
iphone ipad の用プログラミングでvisual C++みたいなのありませんか?

957 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:21:02 ]
スレチ。というか Mac も持ってないのにコード書いても意味ないだろ。

958 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:30:07 ]
>>957
そうなんですか 初級過ぎてすみません><
アップル公式のSDKもよく見たらMAC限定みたいですね 出直してきます

959 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 23:44:33 ]
ちょっとわらった

960 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 09:45:40 ]
ttp://code.google.com/p/json-framework/wiki/InstallationInstructions

ここのOption 3を見ながらJSON-Frameworkを使ってMacアプリでテストを行おうとしているのですが、うまくいかずに困ってます。

フレームワークをプロジェクトに追加したので、3.までは終わってると思うのですが、
4の意味がわかりません。これは何をすれば良いのでしょうか?



961 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 10:31:17 ]
>>960
サイドバーの
「ターゲット」を展開→アプリ名になってる項目を右クリック→「追加」→「新規ビルドフェーズ」→「新規コピーファイル」
開いたパネルの「デスティネーション」を「フレームワーク」に設定
アプリ名の項目を展開→「ファイルをコピー」の上に JSON.framework をドロップ

962 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 10:34:45 ]
JSON.framework は実際のファイルではなくて
サイドバーの <プロジェクト名>/Frameworks 項目の中に入ってるやつ

963 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 11:07:33 ]
>>961-962
ありがとうございます。前進できました。
ビルドすると、JSON Frameworkのいくつかのファイルが見つからないというエラーが出ましたので、
私の設定のどこかがまずいのでしょう。
頑張って潰したいと思います。

964 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 18:46:22 ]
楽しいココアのレヴューにこういう↓のあったんだが、実際のところどう?
あと萩原本以外にいいのないですか?自分はCは中級くらいやれてます

*********************
Leopardにアップグレードしてしまった方、
この本は使えません。Xcode Toolに大幅な変更があったからです。
まだTigerを使っている方。この本は貴方のためのものです。
本の通り作業して行けばCocoaのいろはのい位まではモノになるはずです。

965 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 19:47:48 ]
スレチ。

966 名前:964 mailto:sage [2010/06/21(月) 20:09:39 ]
すみませんでした 新macのcocoaスレ行ってきます

967 名前:デフォルトの名無しさん [2010/06/24(木) 03:59:04 ]
yomi.bbspink.com/test/read.cgi/ascii2d/1275848135/225
採用

968 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 22:15:30 ]
codepad.org/H3j8eTAB

このコードで、どのNSLogも出力されないんだが何か間違ってる?
これじゃNSOperationQueueを使う意味がないのは承知の上。

969 名前:968 mailto:sage [2010/06/28(月) 17:59:49 ]
Appleで聞いてくる

970 名前:デフォルトの名無しさん [2010/06/29(火) 18:10:59 ]
 V V
(´・ω・`) うさちゃんピース



971 名前:デフォルトの名無しさん [2010/07/02(金) 05:44:56 ]
すみません。
1ヶ月未満の初心者なんですが、初歩的なことでつまずいています。

ヘッダファイルで

@interface PListReadViewController : UIViewController {
NSArray* persons;
}

@property(nonatomic,retain) NSArray* persons;

で、ソースファイルで

@synthesize persons;

-(void)hogehage{
NSBundle* bundle = [NSBundle mainBundle];
NSString* path = [bundle pathForResource:@"test" ofType:@"plist"];
NSArray* persons = [NSArray arrayWithContentsOfFile:path];
}

としてるんですが、hogehageのpersonsはローカル変数として扱われてしまうみたいですね。
interfaceで定義してるpersonsに、パッケージにバンドルされてるplistを配列として展開して、
別の関数内でpersonsを使いたいんですけど、どうしたらいいんでしょうか?

972 名前:971 mailto:sage [2010/07/02(金) 06:11:49 ]
できました!

ttp://www15.plala.or.jp/NovemberKou/programming/2ndGeneration/2ndHome/RMGWindowController/fixCrashDnD.html
を参考にしました。

NSArrayの使用サンプルはみんな、1関数内で処理が終了してるものばかりで、なかなか見つかりませんでした。

おじゃましました。

973 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 18:57:59 ]
[NSHoge hoge~~] ってのは自動で autorelease に登録されてると覚えよう。

974 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 20:38:07 ]
とは限らないけどね






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<248KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef