Cocoaはさっぱり!!! version.8at MAC
Cocoaはさっぱり!!! version.8 - 暇つぶし2ch450:名称未設定
07/10/17 15:12:35 9JlNZqhL0
趣味で読むには高過ぎる値段だ。


451:名称未設定
07/10/17 15:34:38 bw4gG9tu0
でもLeopard買わずに済むよ。MacProを買うんなら元取れるし。

452:名称未設定
07/10/17 20:37:50 1AjA4OVd0
俺の用途から言って趣味でMacProなんて宝の持ち腐れも良いとこだし。

まあ26日には読めるんだからそれまで辛抱だろうな。

453:名称未設定
07/10/17 21:22:18 UrqKimq/0
でもま、趣味で買うやつもいるんだろうなw

とりあえずはこれでガマンかー。早くこいこい
URLリンク(www.apple.com)
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)

454:名称未設定
07/10/18 01:06:04 mkmoS9NR0
XcodeのSCM機能は貧弱と聞いたのだけれども、3.0で改善されているのかな
URLリンク(doni-dog.blogspot.com)

455:名称未設定
07/10/18 01:17:10 slHsJ97C0
>>454
そのリンクの奴、ちゃんと使えてるとは思えんな。
SCMが特許対策というのも意味わからん。

456:名称未設定
07/10/18 02:23:44 Mr8A9HPs0
svnadminなんてXCodeに必要な機能じゃないし、TimeMachineなんてありえないわ。

457:名称未設定
07/10/18 06:35:32 tLRRr8tY0
きっと、単に変更履歴を追いかけることが出来るから、後で
特許関連で訴えられたときに証拠として採用するように訴える
ことが出来るだろ、てことじゃないのかな。

採用されるかどうかは分からないが。

458:名称未設定
07/10/18 09:02:33 fqG2TSy+0
オープンソース等で公開されているものなら証拠にはなるかもしれないけど
そうでないなら信頼性はまったくないな。

459:名称未設定
07/10/18 10:54:31 Y0mjkOTf0
まぁ俺は、リビジョン管理システムがないのはやはり欠点と思う。

開発ツールなんだしさ。定期的にスナップショットを保持出来る
ような仕組みがあるだけでも大分違うし。

460:名称未設定
07/10/18 20:27:18 6hta7bjM0
URLリンク(www.apple.com)

Xcode 3.0

# プロジェクトのスナップショット

失敗を恐れず、心ゆくまでテストしましょう。プロジェクトのすべてのファイルを、いつでも好きな時に記録しておけます。万一の時もこれで安心。プロジェクトをいつでも元の状態に戻せるので、自信を持ってテストできます。


461:名称未設定
07/10/18 22:15:13 lA7sYrRH0
Xcode3.0楽しみだね。早くこいこいGC。

462:名称未設定
07/10/19 12:34:51 VK3fEPzF0
>>460
それってsvnベース?
変更点を見比べることができるようなインターフェースが欲しい。

463:名称未設定
07/10/19 13:02:13 GQjRZD8/0
今でもあるけど。

464:名称未設定
07/10/19 13:06:34 z7q4y0U10
>>463
shift-jis 以外の日本語で落ちなければ、今のままでいい。
変換すればdiffは見れるけど、マージできないし。

465:名称未設定
07/10/19 13:51:02 uOW40gYR0
Core Data Document Based Applicationで
ファイルがloadされたときに勝手にNSArrayControllerに
objectが追加されるけど,その追加された直後に何かやりたいときは
どうしたらいいですかね。
notificationでも飛んでくるといいのだが。



466:名称未設定
07/10/19 14:51:45 XaYlxLt20
>>465
NSManagedObjectの
- (void) awakeFromInsert;


467:465
07/10/19 17:04:47 uOW40gYR0
>466
ありがとう
awakeFromFetchでできました

468:名称未設定
07/10/19 19:17:19 m+Row12Z0
>>462
普通に考えるとTime Machineじゃね?

469:名称未設定
07/10/19 20:09:43 k7hQT15w0
現在使用しているシステムの言語を取得するには
どうすればいいのでしょうか?


470:名称未設定
07/10/19 21:06:05 XaYlxLt20
echo $LANG
defaults read NSGlobalDomain AppleLanguages



471:469
07/10/19 22:49:11 k7hQT15w0
>>470
どうもです、以下の方法でいけました。

NSUserDefaults* defs = [NSUserDefaults standardUserDefaults];
NSArray* languages = [defs objectForKey:@"AppleLanguages"];

URLリンク(potting.syuriken.jp)

472:名称未設定
07/10/20 00:26:47 nttpT0GF0
NSCalendarDate で、例えばNSLogなどで%@が指定されている場合、
descriptionWithLocale:が送信されるとドキュメントにはあります。

NSLog(@"The current date and time is %@", [NSCalendarDate date]);
だと、
this statement invokes descriptionWithLocale:
だとあります。

しかし、descriptionWithLocale:は引数として(NSDictionary *)localeをとるのに、
その引数はどこからやってくるのでしょうか。

というか、デフォルトのロケールを(いちいちlocaleを指定しないでも)日本語にしたい
のですが、できるんでしょうか(環境変数なんかで)。
デフォルトロケールをセットするメソッドが見当たらないので、
カテゴリとかで対応するしかないのならそうしますが、そんなことしなくても
済むのならと思いまして。

473:名称未設定
07/10/20 02:55:24 nttpT0GF0
環境変数LANGが日本語に設定されていれば、NSCalendarDateの出力も日本語
になると思っていたのですが、そうではないですよね?

ターミナルからdateコマンドを実行すると、LANGの設定の有無で表示が切り替わる
のが確認できるのですが、自前プログラムでNSCalendarDateを使って表示させると、
日本語がでてくれません。もちろん、localeディクショナリを自前で用意してやると
ちゃんと出るのですが、Cocoaにおいて(具体的にはNSCalendarDateなど)カレン
トロケールの設定はどうしたらいいのでしょうか。

/usr/share/localeのjpフォルダには、LC_TIMEがあって、月、火、水、とか
設定されているのですが、どうもこいつが利用されていないのですよね、NSCalendarDate
では。
OS は 10.3.9です。

474:名称未設定
07/10/20 03:17:55 nttpT0GF0
Appleのドキュメントや荻原本(p306)にあるように、

NSCalendarDate *calendarDate =
[[NSCalendarDate alloc] initWithTimeIntervalSinceReferenceDate:uploadedTime];
[calendarDate descriptionWithLocale:
[[NSUserDefaults standardUserDefaults] dictionaryRepresentation]];

こんな感じでもやってみましたが、ユーザデフォルトから作った辞書のなかに、
NSShortWeekDayNameArrayやNSWeekDayNameArrayといったキーがないので、
やはり日本語が出てくれません。

475:名称未設定
07/10/20 05:52:17 pIwCUrUa0
LANGじゃ機能不足だから。

476:名称未設定
07/10/20 09:31:19 chy8q2CK0
URLリンク(developer.apple.com)

Important: Although you can get the user's preferred settings from the defaults database,
it is recommended you use the CFBundle functions or NSBundle class instead.
The associated functions and methods of those objects return the preferred
language or locale that is also supported by your application. (Bear in mind that the
returned values may not correspond directly with the user's exact preferences.)

あまり参考にはならないかも・・・

477:名称未設定
07/10/20 10:08:04 A3g+yh3Z0
見るべきはこの辺じゃないの?
URLリンク(developer.apple.com)
URLリンク(developer.apple.com)

CocoaはLANG なんて使ってないし。
プログラム内で自分でNSLocaleの初期化時に使えばいいんでないかな?

どうせ聞いてくるから先に。
getenv(3)

478:名称未設定
07/10/20 12:22:05 nttpT0GF0
みなさんありがとうございます。これから仕事なので、
あとでもっとしっかり読みますが、いま、ざっと読んだかぎりでは、

環境変数で挙動を変えるのではなく、コード内でユーザの設定を読み取る必要があるという
ことですね。
すると、やはり、その読み取ったロケールに従って、locale dictinary
を作り(あるいはこれも取得できるのかもしれませんが)、それを引数に指定して
withLocale系のメソッドを呼ぶ、ということになりそうです、いまの理解では。
少なくても10.3においては。


479:名称未設定
07/10/20 18:38:34 A3g+yh3Z0
これがおかしいのか。 >474
職場なので cf.sourceforge.jp で試したけどちゃんとできるよ。
10.4 だけど。

int main( char *argv[], int argc )
{
id pool = [[NSAutoreleasePool alloc] init];

id d = [[NSUserDefaults standardUserDefaults] dictionaryRepresentation];

NSLog(@"%@", d);

id s = [NSCalendarDate dateWithTimeIntervalSinceNow:0.0];
id ss = [s descriptionWithCalendarFormat:@"%c" locale:d];

NSLog(@"%@",ss);

[pool release];
}

で日本語で出た。
もちろんLANGなんて設定してないよ。

480:名称未設定
07/10/20 19:56:16 b1ZhonRi0
cocoaを勉強しはじめて2ヶ月の者です。
基本的なことですが、分からない事があるので質問させてください。
あるクラス全体で使いたい変数を宣言するには、

@implementation クラス名

のあと(メソッドを記述する前の部分)に static という宣言をして
変数を宣言すればよい、と知りました。

そこで、
static NSArray *myArray;
のように宣言し、そのクラスの中に

-(NSArray *)ReturnMyArray{
//NSLog( @"NSArray *myArray =%@",[myArray componentsJoinedByString:@" and "]);
return myArray;
}


という宣言した配列を返すメソッドを作りました。

これを実行すると、このメソッドが呼ばれた時点でフリーズして
しまいます。何が問題なのか分からないので、教えていただけると
ありがたいです。よろしくお願いします。


481:名称未設定
07/10/20 20:44:18 C5KB0rGs0
初期化してやらないといけないのでは

482:名称未設定
07/10/20 20:45:04 MXAR1ZE10
NSLogの行はコメントってことでいいの?
そうであれば、とりあえず呼ばれた時点でフリーズすることは無いんでは。

NSLogの行が有効で、myArrayが何も指していない状態で呼び出すと、クラッシュすると思うけど。

483:名称未設定
07/10/20 21:01:19 ephnEzFr0
多分、基本的な所でつまずいていますので、どなたか教えて下さい。

本体をプラグインにて拡張できるアプリケーションがあるとします。
このとき、本体とプラグインで、
別のバージョンの同じフレームワークを使用する事は出来ますか。

例えば、以下のような構成です。

本体(フレームワーク v1.0)
プラグインA(フレームワーク v2.0)
プラグインB(フレームワーク v3.0)

どうも、先に読み込まれた(本体の)フレームワークを後に読み込んだプラグインでも使用しているようなのです。
バンドルが違っても、同じクラス名はダメなんでしょうか?

よろしくお願いします。


484:名称未設定
07/10/20 23:55:06 i5VOuciv0
ウィンドウの外観をmail.appみたくスッキリした明るいツルペタにしたいのですが、
どこかリソースを配布しているところはありませんでしょうか?

それらしいアプリのリソースフォルダを漁ってもなかなか見つからなくて。

485:名称未設定
07/10/21 00:20:37 AuZVtDw10
NSUnifiedTitleAndToolbarWindowMask

486:名称未設定
07/10/21 12:37:24 2g9tmK/v0
LeopardのObjectiveCのランタイムってオープンソースだよね?
Tigerにも入れられないのかなぁ

ところで、/System/Library/Frameworksの中身って、
アプリケーションバンドルに入れて配布していいの?
配布できるのなら、Tigerでも動くGCアプリが組めるかもしれないね

487:名称未設定
07/10/21 23:54:28 uO+uiivY0
>>479
此方でも確認できました。

>>474で駄目だったのは、一言で云えば勘違いです。
デフォルトフォーマットだと曜日が出力されないため、漢字が表れなかっただけでした。
失礼しました。

皆さんのご教示にヒントを得て試した限りでは、
>>478の内容で間違いなさそうです。

つまり、コード内でロケールを取得し、それに従った辞書を使う、ということですね。
そして、辞書はユーザデフォルトが使えます。これはAppleのドキュメントや荻原本や
>>479のとおりです。

ここまでで当面の障害はクリアできました。しかし、いまだに>>472が謎です。
%@がdescriptionWithLocale:を呼ぶとあるのですが、その場合引数はどこからくるのかな、
と思うわけです。nilだとしたら単なるdescriptionを呼ぶのと差が出ないし。
プログラミングを進めていくうえでこの謎が障害ではないのですが、もし解決するとスッキリ
するので書いてみました。

レスいただいた皆さん、ありがとうございました。




488:名称未設定
07/10/22 15:12:29 Gv93rxrK0
>>487
>%@がdescriptionWithLocale:を呼ぶとあるのですが、その場合引数はどこからくるのかな、
>と思うわけです。nilだとしたら単なるdescriptionを呼ぶのと差が出ないし。

NSLog() では locale 部分は常に nil が指定されているっぽい(挙動より推定)。
何らかの方法で別の locale を指定できるかは不明。ただ NSCalendarDate 側で
setDateFormat: 等により日付の書式を変更することは可能。

NSString の format を扱うメソッドでは locale を指定できる。

489:名称未設定
07/10/23 11:09:44 xEB3AVEJ0
復活した
URLリンク(homepage.mac.com)

490:名称未設定
07/10/23 12:43:14 hf1e1yJr0
スレリンク(mac板:899番)
調べたらいろいろあるなぁ


491:名称未設定
07/10/24 19:31:02 7aPURO+G0
ややこしい質問ですみません。

メニューアイテムのサブクラスを作り、アイテムを動的に変化させるサブメニューを追加ました。

メニューアイテムを選択した時にサブメニューの内容を再表示させるために
・親メニューのデリゲートをメニューアイテムにセット。
・メニューアイテムのサブクラスでmenuNeedsUpdateを記述し、サブメニューを再作成する処理を記述。

この場合、親メニューに同じような動的に変化するメニューアイテムを複数追加すると、
どれかひとつだけしかサブメニューが展開されません。

原因は親メニューのデリゲートを個々のメニューアイテムのサブクラスで取り合ってるからだと思いますが、
うまく全てのサブメニューを動かす方法はありませんでしょうか。

492:名称未設定
07/10/24 20:03:08 sR3ireTF0
単にvalidateMenuItem:で変化させるのじゃダメなの?

493:名称未設定
07/10/24 23:05:29 stlIlKGC0
>>492
ご指摘ありがとうございます。なんとか自己解決しました。
サブクラスのインスタンス変数にNSMenu *aMenuを作って、最初に[aMenu setDelegate: self ]で
サブクラスに記述したmenuNeedsUpdateが効くようになりました。
あとは毎回aMenuのアイテムを作り替えれば出来ました。


494:名称未設定
07/10/27 10:17:12 3Nec+9va0
ウインドウにボタンとラベルだけを配置した画面を
Leopardのテクスチャウインドウにしたら......カッコ悪るすぎる!!

495:名称未設定
07/10/27 11:52:47 jEECVdr70
age

496:名称未設定
07/10/27 14:15:46 3Nec+9va0
Recessed Buttonのフォーカスリングがバグっぽいんだけど俺だけ?


497:名称未設定
07/10/27 17:07:06 iaL/K9DY0
メタル指定のnibウィンドウ、Leopardで起動すると
もっと暗いソリッドな灰色になっちゃう
激しく見づらいです・・・

498:名称未設定
07/10/27 18:36:18 C2JoQvU90
>>497
だよねー。テキストの色を白くするか黒くするか迷うくらいに微妙な色使いだよ

499:名称未設定
07/10/27 21:08:55 Og+Fksq40
まだタイガーなんですけどメタルウインドウは
Leopardではツルペタになるんですか?

500:名称未設定
07/10/27 22:08:37 Bh3IlNe10
メタルなウィンドウにテキストを書く場合は、
テキストに下方向に白色のドロップシャドウを落とす
(そうすると彫り込んであるように見える)のが筋だね。

Leopardのソフトはほとんどそうなってる。

501:名称未設定
07/10/27 22:08:41 C2JoQvU90
なるんですよorz
それがかっこわるいんですよorz

502:名称未設定
07/10/27 22:57:58 kLyG3aM00
タイガーで問題なかった俺のコード
レパドンでは動かねぇ‥ orz


503:名称未設定
07/10/27 23:10:42 ucyY83x00
俺のは全部動いたお \(^o^)/

504:名称未設定
07/10/28 00:31:30 74uJkHwy0
NSMenu のサブクラスを作り、
numberOfItems の中で [self setDelegate:hoge] を(問答無用に)実行してた
Tiger では問題なかったけど、Leopard では setDelegate が numberOfItems を呼ぶので
無限ループになってしまった。

505:名称未設定
07/10/28 07:29:38 TbbSGqL60
NSString lineRangeForRange:
について質問です。これは、改行コードを種別に関わらず含まない
NSRangeを返すと考えてよいのでしょうか?
例えば、CRLF、LF、CRのいずれも取り除いた(改行コードをふく
まない)1行の範囲を取り出してくれるということでしょうか?

ずっと自前で実装してたので・・・orz。

506:名称未設定
07/10/28 11:06:35 +sZmZGVM0
>>505
getLineStart:end:contentsEnd:forRange: の説明によると行とは以下のいずれかで
区切られたものであると書いてある:

U+000D (¥r or CR)
U+2028 (Unicode line separator)
U+000A (¥n or LF)
U+2029 (Unicode paragraph separator)
¥r¥n, in that order (also known as CRLF)

これは lineRangeForRange: でも同じはず。

507:名称未設定
07/10/28 16:51:41 r6e7RucM0
新InterfeceBuilder だけど、クオーツコンポザーみたいに
GUIだけでアニメーション付きGUIを設計できると期待してたんだけど、
やり方がよく分からん。
多少なりともコードは必要なんですかね。

508:名称未設定
07/10/28 17:56:23 VmKk9DlI0
ですね。
特に新IBは、自分のクラスをインスタンスする方法が解らなくてイライラしたw

509:名称未設定
07/10/28 20:18:21 XloRMi6L0
>>506
レスさんきゅです。

結局安直な手法で逃げました。
[NSString stringByTrimmingCharactersInSet:
[NSCharacterSet whitespaceAndNewlineCharacterSet]];

これだとマルチラインには対応できないですけど、とりあえず
は使えそうなので・・・

510:名称未設定
07/10/29 00:56:39 24BH5rD00
>>509
安直と言うか、よくわからんがやりたいのはそれなのか。
ちなみにwhitespace(空白)もトリムされるがいいのかな。

511:名称未設定
07/10/29 22:30:49 ZYf1cvjU0
GCすげえ!!
俺のアプリのメモリ消費量が半分になったorz

512:名称未設定
07/10/29 22:40:21 WF5b1sUq0
それはGCが凄いと言うか・・・

513:名称未設定
07/10/29 22:58:14 3xNL/5J/0
……まあ、orz付けてるのに免じて
少なくともAppleは>>511に福音を齎したと言う事でひとつ。

514:名称未設定
07/10/29 23:33:13 UlbYCa240
Apple製アプリも>>511と大して変わらんよ。
leaks動かすと相当酷いってことが判る。
API自体leakしてるのもあるし。

515:名称未設定
07/10/30 01:46:40 UEjozDia0
それはGCが凄いというか>>511がダメだ

っていうんだったらGCの恩恵を最大限に受けてるってことで、
結果的にはオーライだったと言えるな。
俺のコードもメモリ消費量の低下が半端じゃないw

516:434
07/10/30 07:10:03 kfmeCiZ40
>>437
ずいぶん経ちましたが、NSViewAnimationでいけました。

517:名称未設定
07/10/30 10:38:54 IZLIO/QN0
1.0で書かれたコードでGC有効にするのって、特に何もしなくても良いの?

518:名称未設定
07/10/30 10:53:40 uwVxnpmO0
deallocの内容によるんでねえの。

519:名称未設定
07/10/31 02:16:17 SyaOS2Kn0
萩原本の検証と結論が済んだLeopard対応版を待ってしまう俺はヘタレ

520:名称未設定
07/10/31 19:24:36 AmyfOyxk0
URLリンク(mattgemmell.com)

521:名称未設定
07/10/31 23:15:48 73MMG/Dl0
今HMDTを見て知ったんだけどWooden shipsの人が亡くなったんだね。
昔自作のソフトを載っけてもらったことがあるんだよなあ
49歳なんてまだ若いのに残念

522:名称未設定
07/11/01 00:33:29 25EKZp+g0
OS X使いとしてはitojun氏が無くなったのもかなり残念。37歳、若過ぎる…。

523:名称未設定
07/11/01 04:38:51 m0Ek7Tcl0
[NSFont description]の結果
NSFont = "HiraKakuPro-W3 100.00 pt. P [] (0x00373d50) fobj=0x00372930, spc=33.30";

のspc=33.30が何なのか(たぶん下の余白だと思う)
変更可能ならどうやればいいのか
知ってる人教えて

524:名称未設定
07/11/01 11:29:01 XHMm/9gV0
Fontの属性を変更するのでは無くて、2行目の位置を自前で計算してだせば良いのでは?

525:名称未設定
07/11/01 15:07:06 m0Ek7Tcl0
>>524
Fontはほぼgetterしか無いからそうするしかないのかな
33がline spacingっぽからset 0とできればスマートなのだけど

526:名称未設定
07/11/01 19:21:45 XHMm/9gV0
Fontが編集出来たら原理的に駄目だろう。俺んちのosakaフォントとお前のうちのosakaフォントの
見た目が違ったら駄目じゃん。
うまい方法hじゃ

527:名称未設定
07/11/01 19:22:40 XHMm/9gV0
ごめん、さっき解決方法を思いついたけど忘れたonz


528:名称未設定
07/11/02 04:29:29 gwCUIALD0
NSAlertの

- (void)setShowsSuppressionButton:(BOOL)showButton

でチェックした場合、
また、アラートを表示したい場合はどうすれば良いのでしょうか。
設定の保存場所を教えていただけないでしょうか。

529:名称未設定
07/11/02 18:12:22 B5h15Yrn0
Leopard で動かない報告が多く出ているのを考えると、拡張性が高い Objective-C
が裏目に出ているのかな。つうか、発売が延期になったくせに対応できてない商用ソフト多数
ってところに、Mac の力の弱さを感じる。


530:名称未設定
07/11/02 20:41:01 0Xa0RRTf0
そもそも動かなくなるってのはなんで?
クラスやメソッド自体がなくなるとか?


531:名称未設定
07/11/02 20:52:31 tSiOpZEw0
Tigerの時に廃止を予告されたものは数多くあるが、互換性はまだあるだろ。
Carbonの古いAPIですらまだ動くぞ。

532:名称未設定
07/11/02 20:53:11 PjiJdx3J0
>>529
だって発売日まで最終版が手に入らなかったわけだから仕方ないでしょう
バグなのか仕様なのかはっきりしない部分も沢山あった

>>530
メソッドがなくなるのもあるし、10.5から非推奨関数になったものは正常に動かない場合もある

533:名称未設定
07/11/02 21:14:18 /uepB7fw0
>>532
非推奨の古いAPIの方が変にいじらない分ちゃんと動くよ。
出来たばかりのAPIとか内部構造を改良した(つもり)のAPIの方が
動作が変わったり、バグが出たり消えたりして動かないw

534:名称未設定
07/11/02 21:58:02 EINr1KLa0
ていうかObjCランタイム総入れ替えしてるわけだから
何があってもおかしくないでしょ。

535:名称未設定
07/11/03 16:19:10 fenLA4fy0
Xcode2.5が出ていますが、これはタイガー用ということでしょうか?
現在2.4.2なのですが2.5にあげるメリットはありますでしょうか?
(Leopardでも動くようになるとか)

536:名称未設定
07/11/03 16:50:48 x0ahP+Zd0
・Xcode 2.4.2って存在してたっけ?

せめてこのページくらいは読んでからにしてくれ。
URLリンク(developer.apple.com)

537:名称未設定
07/11/03 23:27:00 NGuLosbV0
ありがとうございます。
Xcodeは2.4.1でした、うろ覚えだったもんで。

英語にちょっと弱いんですが、2.5にするとLeopardでも動く
ということでしょうか。

538:480
07/11/04 00:25:35 RpfIewzZ0
亀レスで恐縮です。
>>480についてなんですが、

@implementation クラス名 のあとにstaticで静的変数を宣言しました。
そして、その変数に値を代入するメソッドを実行したのち、
そのクラスの別のメソッドから戻り値としてその変数の値を
返す、ということをやってみました。

ところが、NSLogでログ出力してみると、変数に値を代入する
メソッドにおいて、値を代入した直後に出力したログには、正しく
代入した値が表示されるのですが、別のメソッドでNSLogで
ログ出力してみると、nill がかえってきてしまいました。

デッバガで見ても、やはり静的変数の値が、値を代入したメソッドを
抜けると、保持されていないみたいです。

静的変数は、宣言したクラス内では値が保持され、どのメソッドから
でも値を入れたり、呼び出したり出来るものと認識しているのですが、
何からおかしい部分はあるでしょうか?
よろしくお願いします。

539:名称未設定
07/11/04 01:21:37 wjfj7/Ph0
その現象が再現する最低限のソースくらい出してくれ。

540:480
07/11/04 01:29:22 RpfIewzZ0
すみません。

@implementation myClass

static NSArray *arrayA;

+(void)ReplaceArrayA:(id)array{

arrayA = array;
NSLog( @"arrayA =%@",[arrayA componentsJoinedByString:@"&"]);

}


+(NSArray *)getarrayA{

NSLog( @"arrayA =%@",[arrayA componentsJoinedByString:@"-"]);
return arrayA;

}




まず、ReplaceArrayA に配列を引数として送り、次にgetarrayAからarrayAを戻り値として
ほかのクラスに値を渡します。

541:名称未設定
07/11/04 01:38:59 lq5eJ6su0
// 「値が保持され」るのはあくまでもアドレスだけということは理解してる?
// 指摘箇所2点

@implementation myClass

static NSArray *arrayA = nil; // (1)何も入っていない場合のためにnilを入れておくべし

+(void)ReplaceArrayA:(id)array{

arrayA = [array retain]; //(2)渡されたarrayが他でreleaseされてもいいようにretainしておくべし
NSLog( @"arrayA =%@",[arrayA componentsJoinedByString:@"&"]);

}


+(NSArray *)getarrayA{

NSLog( @"arrayA =%@",[arrayA componentsJoinedByString:@"-"]);
return arrayA;

}


542:名称未設定
07/11/04 02:04:34 wjfj7/Ph0
>>541

それじゃ leak するべ。

+(void)ReplaceArrayA:(id)array
{
[arrayA autorelease];
arrayA = [array retain];
NSLog(@...);
}


ついでにスタイルの問題を指摘しておくと、

* class 名は大文字で始める (myClass → MyClass)
* method 名は小文字で始める (ReplaceArrayA → replaceArrayA)
* getter method は変数名そのまま。get で始めない (getarrayA → arrayA)
* setter method は set で始める (ReplaceArrayA → setArrayA)

543:名称未設定
07/11/04 02:27:45 hRwgY5Fp0
setter と getter はスタイルだけの問題じゃなくて、
Cocoa binding につかえるかとかにかかわってくるので、
しきたりに従っておいたほうがいいですよ

544:名称未設定
07/11/04 02:43:43 lq5eJ6su0
>>542
>それじゃ leak するべ。
そうだ、スマン・・・

545:名称未設定
07/11/04 07:20:36 0qI6n8f/0
 [ NSThread detachNewThreadSelector: @selector( myThread ) toTarget: selfwithObject: nil ];
という感じで立てたスレッド内で、ファイルをダウンロードする為に
NSURLDownload *mydl = [ [ NSURLDownload alloc ] initWithRequest: req delegate: self ];
してみたのですが、delegateが呼出されなくなりました。
スレッドを立てずNSURLDownloadを使う分には、上手く行くのですが...スレッド内では使えないってクラスという事なのでしょうか?


546:名称未設定
07/11/04 07:53:48 EtU+Y3fk0
>>545
>Note that these delegate methods will be called on the thread that started
> the asynchronous load operation for the associated NSURLDownload
> object.

とリファレンスにある訳だけど、それは大丈夫なの?

547:名称未設定
07/11/04 08:02:48 IbdV1wlP0
IKImageBrowserって便利そうだな~と思ってたら
Bindingじゃ表示できないので、DataSoruceを作ってやらないと
いけないのね。昔のTableViewを使うみたいに。めんどい。

548:名称未設定
07/11/04 08:10:45 0qI6n8f/0
>>546
正直、なにを気をつけろと言っているのか、さっぱりw
まだ、Cocoaの勉強し始めであまり詳しくないんです。

やりたかったのは、
これ
URLリンク(www.big.or.jp)
とこれ
URLリンク(www013.upp.so-net.ne.jp)
を組み合わせて、ボタンをクリックしたら、一定周期で画像をダウンロードするアプリを手習いがてら作ってみようとしたんですけど、すっかり嵌ってしまいました。


549:名称未設定
07/11/04 08:33:21 TZN/ptPy0
>>544
あとで自分でreleaseすれば問題ないじゃんとか思ったのはオレだけでいい

550:名称未設定
07/11/04 09:00:12 EtU+Y3fk0
>>548
あなたが立てたスレッドAの中で mydl を生成したのなら、
そのスレッドAに対して delegate のメッセージが送られますよ、と。

だから、メインスレッドで delegate メソッドを受け取ろうとしてもダメ。

勉強し始めで NSThread と格闘する必要はあまりないような気がします。
やりたかったことは、NSThread で別スレッド立てなくても十分
出来ると思います。NSTimer で一定間隔で NSURLDownload を作って
やればいいと思う。

551:名称未設定
07/11/04 09:08:28 mdbrqZtH0
>>549
甘い。渡された array が arrayA とたまたま同じだった場合に
retain count が増えてしまって開放されなくなる。

まあ static object 一個ぐらいいい気もしますが。

552:540
07/11/04 09:09:37 hK/+lBWK0
>>541-543
ご指摘ありがとうございました。
release や retain に全く気を配ってなかったので、
そのへんを勉強し直したいと思います。

コーディングスタイルについても、アップルのドキュメントが
あったので、参考にしたいと思います。

また何かありましたらよろしくお願いします。

553:名称未設定
07/11/04 09:35:10 mdbrqZtH0
まあ Leopard で ガーベジコレクタがついたので、
retain/release はあんまり気にしなくてもいいんではないかと思うけど。

554:名称未設定
07/11/04 09:47:24 HL69eV8Y0
「あんまり気にしない」んじゃなくて、gc使うなら自分で参照カウントを「管理しない」のが正解じゃないの。gcとretain/releaseって共存できるの?

555:名称未設定
07/11/04 09:52:10 0qI6n8f/0
>>550
丁寧な説明ありがとうございます。
ご指摘の通り、スレッドはこっちへ置いておいて、NSTimerを調べてみます。


556:名称未設定
07/11/04 10:03:53 mdbrqZtH0
>>554
「あまり」気にしない、というのはたんに婉曲語法で使っただけでした、失礼

それとはべつに、retain/release と gc はある意味共存できるらしいですよ。
たとえば、retain/release つかって書いたライブラリを gc つかったプログラムから呼び出すとか。その場合は gc が retain/relase を乗っ取ってそっちが管理してしまうらしいですが。

557:名称未設定
07/11/04 10:38:34 0qI6n8f/0
NSTimerを使って、無事に思った事が出来ました。
ありがとうございました。


558:名称未設定
07/11/04 14:41:54 LrVqL1O30
>>554
ぱっとドキュメント流しただけでまだ勉強中なんだが、GCにするとRelease/Retain
で書いたコードは既出の通りRelease/Retainが無視されるようになる。ただし
-deallocも呼び出されなくなるようなので、dealloc内で解放以外の処理(ノー
ティフィケーションの登録削除とか)してると修正いるんじゃない?

559:名称未設定
07/11/04 15:22:32 AqAwLsu+0
Objective-C ランタイム内でガベージコレクタの書き込み禁止割り当てプリミティブを使用するようにコードをコンパイルします。
コードには、GC 対応であることを示すマークが付きます。GC 対応のマークが付いたアプリケーションは、ランタイムからガベージコレクションを有効にして起動されます。
このアプリケーションでリンクまたは読み込まれるすべての Objective-C コードも GC 対応でなければなりません。GC“必須”としてコンパイルされたコードは、
従来の Cocoa retain/release メソッドを使用しないものと見なされるため、ガベージコレクションを有効にして実行していないアプリケーションには読み込めません。
GC“サポートあり”としてコンパイルされたコードは、従来の retain/release メソッドのロジックも含まれていると見なされるので、どのアプリケーションにも読み込めます。
ガベージコレクションは、Mac OS X 10.5 以降でのみサポートされます。[GCC_ENABLE_OBJC_GC, -fobjc-gc | -fobjc-gc-only]

560:名称未設定
07/11/04 19:01:40 m+9mmSo10
>>528

どなたか、これ分かりませんか。

561:名称未設定
07/11/04 19:31:56 F4mUKxhG0
>>560
ググると参考になりそうなソースが見つかるよ。

562:名称未設定
07/11/04 21:27:53 m+9mmSo10
>>561
ググっても、ゲイツに聞いても見つけられませんでした。
教えていただけないでしょうか。

スポットライトで更新されたファイルをみてもそれらしいのは、見つけられませんでした。

563:名称未設定
07/11/04 21:56:20 eMpGE3Ul0
質問です。
IB で作った GUI のボタンのクリックによって呼び出される
メソッドは、IB でアクションとして登録したメソッドでなければ
いけないのでしょうか。

GUI のボタンクリックから直接クラスメソッドなどを呼び出せれば、
便利だと思うのですが...

よろしくお願いします。

564:名称未設定
07/11/04 21:57:36 g1odPZrS0
>>560
リファレンスのListing 2見る限りそのメソッドは、チェックボックスの表示と
チェック結果の取得ができるだけで、チェック結果は自分でuser defaultsなどに
保存する必要があるように読めます。
その保存結果を消せばよいのではないでしょうか。

565:名称未設定
07/11/04 22:11:04 7bDqXoXS0
なんでこんなところにVB厨が?

566:名称未設定
07/11/04 23:07:40 hkBkZacr0
>>563
便利感がわかりません。

567:名称未設定
07/11/04 23:16:31 +MPnTuBD0
>>563
Visual Studioでオナニーしてきてください。

568:名称未設定
07/11/04 23:21:01 m+9mmSo10
>>564
ありがとうございます。
小さいプロジェクトでやってみましたら、たしかに保存されません。

しかし、保存されている(と言うかチェック後アラートが出なくなった)プロジェクトもあります。
ユーザデフォルトは使っていますが、自分で保存はしてません...、何か別の要因ですかね。

569:名称未設定
07/11/05 00:03:37 cWmVqLLf0
>>563
引数はどうするんだい?

570:563
07/11/05 00:44:49 vL57EKa+0
自分はVisualStudio など使った事がないので、どうして
そのように言われるのか全く分からないのですが...

たとえば、ボタンをクリックすると引数のいらないシンプルな
メソッドhogeを実行させたい場合、ボタンから受け付ける
IBAction のメソッドは、単にhogeにメッセージを投げるという
メソッドを実装するということになります。そうであれば、ワンクッション
おかずに直接一般的なメソッドをボタンから呼べれば便利かと
思ったのですが。

>>566 の便利感が分からないというのは、このようなことで面倒
臭がってる感覚がおかしいということでしょうか?

>>567のレスは、このような考え方が Cocoa の考え方から逸脱
しているという意味ですか?

571:名称未設定
07/11/05 00:53:26 cxjLp4Oj0
>>570
>>>567のレスは、このような考え方が Cocoa の考え方から逸脱
>しているという意味ですか?
MVCの考え方からするとあまりよろしくないんじゃないかな

572:名称未設定
07/11/05 01:17:22 eRl6Ul/x0
>>570
それができたとしても、結局ボタンが押されたときに
どのクラスの
どのクラスメソッドを
動かすか指定しないといけないよね、
それと、アクションをctrl-クリックでつなぐのと
面倒くささは似たり寄ったりだとおもうんだけど?

573:名称未設定
07/11/05 02:46:33 Jwl3DmWu0
>>570
わざわざ引数無しのメソッドに投げる意味が分かりません。
引数を無視するほうがシンプルでしょうが。

574:名称未設定
07/11/05 03:23:50 eRl6Ul/x0
<チラシの裏>
ああ、573 のレスでやっと意味がわかった。
570 は
-(void) hoge
{
いろいろ
}
-(IBAction) action:(id)sender
{
[self hoge];
}
というのが面倒ということで、573 は単に
-(IBAction) action:(id)sender
{
いろいろ
}
と書いてしまえばいいといってるわけね。
</チラシの裏>

575:名称未設定
07/11/05 08:01:47 hf81cxz/0
○○ができた方が便利、なんて言い出したらキリないよ

だから、最低限アクションの発生もとがわかる様に
senderを引数とするメソッドを呼ぶ様にしているだけ



576:名称未設定
07/11/05 09:55:21 8hT6idG50

送り元を特定する処理を書かなくてすむので楽。

 senderがViewの場合、Viewに対して問い合わせが容易。
 senderがControllerの場合、Controllerに対して問い合わせが容易。

結局senderがある理由って、MVC/KVCを実装するのに便利っていう感じ?


577:名称未設定
07/11/05 17:00:38 IpQGnVb20
KVCは関係ないわな。
あと、.NETでもアクションに対してsender(とevent)は送られる。

578:名称未設定
07/11/05 23:20:43 bq62hcmK0
ネットからデータをダウンロードするたぐいのアプリを作ろうとしてるのですが、
マシンがネットにつながっているかどうかを調べるには、どうすれば良いでしょうか。

579:名称未設定
07/11/06 00:01:37 dDZ7LoMrO
人間の貴方ならどうやって確認しますか?

ブラウザで繋いでみる
ピンで応答を見る
ルーターにグローバルアドレスが振られているか確認する



580:570
07/11/06 00:43:54 EfkD9Hx20
>>574
まさに、そう考えていたわけです。

確かに、MVCの観点ではあまりよくないという事で、納得しました。
レスしてくださった皆さん、ありがとうございました。

581:名称未設定
07/11/06 01:03:46 yXSDPyUU0
64ビットでコンパイルしたらメモリ使用量が2倍になったorz

582:名称未設定
07/11/06 01:06:25 82XP8MSU0
>>578
まずは本当に「ネットにつながっているかどうか」を調べる必要があるのか考えるべき

583:名称未設定
07/11/06 01:27:07 0tRgvZRF0
>>581
そりゃポインタが 64bit になるんだから、id だらけの Cocoa プログラムなら目盛使用量が2倍になるベ

そんなにすごい仕事してるの?GUI で64bit って余程のプロでないと使わない気がする ...

584:581
07/11/06 19:07:34 EYJtqLlN0
>>583
特に64ビットは必要ないんだけどソースコードの品質を上げるために試してみた
現時点ではバイナリサイズもメモリ消費量もでかくなるのでメリットはないかも
でもねアクティビティモニタに唯一64ビットと出るので、優越感は味わえる...人も...

585:名称未設定
07/11/07 23:34:09 simMyFDM0
CoreAnimation に関する和訳資料が、木下さんの
URLリンク(journal.mycom.co.jp)

これぐらいしかないんだねー。
CocoaBreak! さんとかががんばってるのに、アップルジャパンは
仕事しないねー。

586:名称未設定
07/11/08 00:30:07 QRMuL5KH0
CoreAnimationってWindows(.NET)のWPFよりショボクない?
というより、CoreAnimationの活用場所が限られ過ぎorz

587:名称未設定
07/11/08 00:41:08 oaqtntGw0
確かに、簡単だからといって乱用は禁物ですよね。
でも、テーブルの並び替えや移動とか、アニメーションすることに
よってユーザビリティが上がる事もあるから、使い方次第ですかね。

588:名称未設定
07/11/08 00:50:21 rO6zyLL/0
とりあえず [[view animator] setFrame: ...] とかでアニメーションになるのはいいことだとおもう

589:名称未設定
07/11/08 09:08:40 7GRUAd0i0
setFrameとかを使う機会がないかも...
タブを切り替えるときにいちいちウインドウサイズなんて変更しないし

それよりもiPod touchのような感覚的に解りやすくなるUIを期待していたのにな
スクロール移動に慣性を持たせたりね

590:名称未設定
07/11/08 17:24:26 zEdsiKUW0
ていうかアニメーションのあるUIってなんかイヤだ

591:名称未設定
07/11/08 17:33:37 mw5+Wv5j0
IB3.0のライブラリパネルが軽くフェードインアウトするような
ちょっとした効果は、まあ多少心地いいんだけど

設定でアニメ切れるようにして欲しいとも思ふ

592:名称未設定
07/11/08 20:59:50 8YBf9K2+0
インターフェイスがぐにゃりと曲がって笑ったw
パフォーマンスを気にするソフトでは使えないなぁ

593:名称未設定
07/11/08 21:24:26 InO3sJ7M0
NSFileManagerで例えば大量のbmpを移動させると、
メモリ使用量が増えまくるけど何故?

594:名称未設定
07/11/10 11:24:03 yoCzO0Lu0
バグじゃない?
というかCocoaのメモリリークはGCに頼るしかないかもorz

595:名称未設定
07/11/10 15:52:41 x13Isy6l0
何でもライブラリのバグのせいにする奴がいるが、大抵は自分のコードが原因。

596:名称未設定
07/11/10 16:32:44 5JNbGREU0
Core Data で、関連の設定がうまくいかず困っています。
コード内で NSMutableSet を setValue: forKey: でエンティティの
関連に設定してるのですが、一度セーブして再びそのファイルを開くと、
設定したはずの関連が無くなってしまっています。

関連は「一時」ではありません。
アプリは、document based では無い方です。
どの段階で関連が切れてしまっているのか、さっぱりです。

597:名称未設定
07/11/10 22:21:46 ns71lhvZ0
CoreAnimation を使うためには、どのヘッダファイルを
インクルードすればいいんですか?
Apple の CoreAnimationプログラミングガイドにも、記述が
ありませんでした。
とりあえずQuartzCore.flamework はプロジェクトに取り込みましたが
ダメでした。

598:名称未設定
07/11/10 22:29:06 jaO8AJbf0
ヒレガスの本に書いてあるNSTableViewのサンプルが動かないんだが、仕様でしょうか。
要素を追加してもテーブルに反映されないです。
参考までにXCode、2.5 tiger。

599:名称未設定
07/11/10 22:32:02 uoStVjcs0
>>597
つ /Developer/Examples/Quartz/Core Animation

600:名称未設定
07/11/11 12:09:17 /h9pnLX90
Cocoaで開発しているとつい構造体の存在を忘れてしまうけど、
データ構造を解りやすく表現する手段として重要だよね。
(KVCやDictionaryだと規模が大きくなると大変)
そんな時にpropertyの登場。うれしいけど下位互換性を保てなかったものか....


601:名称未設定
07/11/11 23:54:16 3xiFJV1b0
構造体使ってると、PPC/Intelで整合性がとれなくなるよ...

602:名称未設定
07/11/12 00:02:37 6pJx53410
CPUに依存するコードを書くから。

603:名称未設定
07/11/12 00:16:22 6YN+nfcu0
エンディアンですか

604:名称未設定
07/11/12 00:18:23 jJlBa7Hw0
べつに構造体つかってもいいんじゃない?ちゃんとディスク/ネットワークに書くときに気をつければ。

605:名称未設定
07/11/12 00:41:11 bRgWt6KB0
>>601
そろそろ答えをお願いします。

606:名称未設定
07/11/12 01:52:24 6qKNkZiA0
オブジェクト指向はどこへ消えた




607:名称未設定
07/11/12 06:44:56 t+THQgiE0
質問します。たとえばQuickSilverみたいに、どんなアプリが動いていても
起動してくれるショートカットキーの設定って、どうやるのでしょうか?
システム全体のキーボードイベントをフックして実装するのかと想像してるのですが
そういうイベントを受け取る方法を見つけられませんでした。

キーボードとかマウスとかフォーカスとかのシステムイベントをフックする
方法ってあるんでしょうか?


608:名称未設定
07/11/12 06:55:13 inGQ9CFd0
QuickSilverってのは知らんけど、自分のアプリが手前になくても、特定のキーイベントを受け付ける方法としては
Carbon EventにHotKeyというのがある。
RegisterEventHotKey、kEventHotKeyPressed、kEventHotKeyReleased辺りを使う。

609:名称未設定
07/11/12 07:02:27 t+THQgiE0
>>608
ありがとう。さっそく試してみます。


610:名称未設定
07/11/12 09:06:28 1OnUOF+c0
エンディアン変換はAppleが用意してるのでそれ使えばいいだけだ。
注意しなければならないのは浮動小数点を中間コードに変換することくらいだな。
ディスクに書き込むのなら、構造体ではなくてXML使うようにしてるけどな。

611:名称未設定
07/11/14 11:18:15 n4OM99880
Cocoaにはデフォで複数行表示で左揃えなタブコントロールはないのか・・・

612:名称未設定
07/11/14 11:19:38 6xRVuEo90
そんな気持ちの悪いUIはいらん。

613:名称未設定
07/11/14 11:58:54 n4OM99880
まあ複数行表示なんてどうでもいいが
Safariのタブはなぜ標準提供されないのだろうか

614:名称未設定
07/11/14 21:09:56 +yEMUk1e0
AppleアプリのUIは継ぎはぎだらけなので真似するのが大変orz
だからRIUIを難しくしているような気がするけどな

615:名称未設定
07/11/14 22:16:14 KqpvVDcT0
3になってカバーフローとか簡単に出来るんかいな。

616:名称未設定
07/11/14 22:35:49 XnqPDGec0
Windows の Office の環境設定一度でも使った事ある人なら、
複数行タブの馬鹿らしさが分かる

617:名称未設定
07/11/14 22:46:16 iClwHio80
CGSGetOnScreenWindowListで取得したウィンドウに対して
CGSSetWindowLevelによりウィンドウレベルを設定しようとしています。
自アプリのウィンドウは変更されるのですが、
他アプリのウィンドウはエラーが返ります。
同じくTransitoinWindowでウィンドウを操作しようとしますが、
他アプリのウィンドウは操作出来ません。
どなたか他アプリのウィンドウを操作する方法をご存知ないでしょうか?

618:名称未設定
07/11/14 23:09:12 jAWzhafe0
他アプリのウィンドウの参照をどうやって取ったの?

619:名称未設定
07/11/14 23:12:58 jAWzhafe0
あああ、上のレスは忘れて

620:名称未設定
07/11/14 23:23:01 Xis7E2030
>>615
ソースが公開されているが読んでもよくわからん

621:名称未設定
07/11/15 00:45:47 GB5EBmPl0
>>609
QuickSilver オープンソースになったよ
blacktree-alchemy でぐぐれ

622:名称未設定
07/11/15 12:46:30 Mwb686F+0
時々Getterコードで
-(Foo*) foo
{
return [[foo retain] autolerease];
}
というコードを見るんだけど、何か意味があるの?

623:名称未設定
07/11/15 13:06:16 7a7zfmZx0
AutoReleasePoolが解放されるまでの間保持させるってことだろ。

624:名称未設定
07/11/15 13:08:13 woMNQIGU0
呼び出した後に元のクラスを解放することを想定してんじゃね?

625:名称未設定
07/11/15 13:29:39 9q45mP2D0
しかしCocoaのポリシーとしては、そういう場合はgetterを呼び出した側が(必要なら)retain-autoreleaseしなさいと言っているように見える。
URLリンク(developer.apple.com)

626:名称未設定
07/11/15 13:48:25 o0uKsE520
Leopardで刷新されたMac OS X対応開発言語「Objective-C 2.0」の真価を探る
URLリンク(journal.mycom.co.jp)

627:名称未設定
07/11/15 14:16:50 7a7zfmZx0
propertyのとこ、おかしくないか?
インスタンス変数がNSString * _name;だとエラーになるんじゃね?

628:名称未設定
07/11/15 18:06:34 yJVNynki0
プロパティとかブロック構文みたいのとか便利だと思うけどLeopard専用じゃあすぐには手を出しにくいなあ
記事にもあるけどせめて10.4くらいから動いてくれないと

629:名称未設定
07/11/15 19:42:11 7a7zfmZx0
Objective-C 2.0にするとTigerをサポート出来なくなるからな。後、2年くらいは
Tigerをサポートしたいし。

10.4.11でObjective-C 2.0のランタイムをサポートしてくれれば良かったのに。

630:名称未設定
07/11/15 22:27:57 OxRPElrt0
Xcode3ではなんと!!!!!!!!
@"あいうえお" が使える!!!!!!!
うれしい!!!!!!!

631:名称未設定
07/11/16 00:48:51 qefaGqef0
>>630
>@"あいうえお"

なにおきてもしらんど


632:名称未設定
07/11/16 08:32:57 oGZ+fjo20
>>625
>>622 と同じ例もあったりするけどね。

URLリンク(developer.apple.com)

どうなんだろうなあ。とりあえずコード的にはこっちの方がすっきりするが...
中がどうなってるか分からない getter から返ってきたオブジェクトはは常に retain
しなきゃいけないとすると、めんどくさいなあ。

633:名称未設定
07/11/16 11:47:44 N3h5kz0i0
>>632
信頼できないライブラリなら retain ではなく copy するべきかもね。
返された NSString が実は NSMutableString で、知らないうちに内容
が書き変わっていたりするかもしれんしw

634:名称未設定
07/11/16 12:09:30 cNV2hLUV0
>>632
GC 無し Cocoa では、init.... もしくは copy... 以外のメソッドから
返ってきた id を保持する場合は retain すべしという決まりになっていた
気がするんですが。

635:名称未設定
07/11/16 12:19:47 CbzyFQzY0
>>631
うそーん。なんで?

636:名称未設定
07/11/16 20:39:40 CUEn9uCm0
>>626>>622と似たようなコードの例が載ってて、それはマルチスレッドに対応するためらしい。
似てると言っても結構違うけど。

637:名称未設定
07/11/16 21:36:04 tvhXsAYJ0
>>632
getter/setterの組み合わせで、ひとつのautorelease poolの中でdeallocされないようにする
ということが目的なので、リンク先のListing3-6・3-7のどちらかを選べばよいということだと思います。
3-6のgetterと3-7のsetterの組み合わせで書いてしまったりすると、getした直後にsetされるとアウト。

retainする必要があるのはautorelease poolのサイクルの外で取得したオブジェクトを使いたいときですよね。
インスタンス変数に保持するとか、別スレッドから参照するとか。

>>636
マルチスレッドもautorelease poolに関してのことだから同じ話だと思いますよ。


638:名称未設定
07/11/16 23:23:35 hGnpQD7r0
>>626とかみて今まで不思議だったんだけど、nilのオブジェクトに
メッセージ送っても安全なんですかね?
retainやreleaseはnilチェック無しでもOKなんですか?

639:名称未設定
07/11/16 23:44:09 U4RUIbsl0
>>638
問題ない。

ついでにいえば ヒレガス本 p44にそのまんま書いてある。


640:名称未設定
07/11/16 23:47:58 WI/houEB0
>>638
先越されたが、メッセージ送信自体は安全らしい。
URLリンク(developer.apple.com)

ところで>>626のリンク先にnilにメッセージ送ってるコードある?

641:名称未設定
07/11/16 23:52:36 OhjYmzCB0
ぬるぽ!

642:638
07/11/17 03:22:18 kGkshqIg0
>>639-640
ありがと。いままでnilチェックしてたわ。他の言語なら
余裕で落ちると思ったけど。結構アバウトに動くのね。

>>626は_nameの初期値がnilだろうから・・・いいのかな?って感じに。

643:622
07/11/17 09:00:15 aQOoTe4X0
>>623
>>624
ありがとう!。でもそういう使い方を,,,,,,するかも(ゾッ)
プログラムを見直してみよ

644:名称未設定
07/11/18 12:38:23 YFIOeH3f0
>>637
>ということが目的なので、リンク先のListing3-6・3-7のどちらかを選べばよいということだと思います。

そういうことを疑問に思っているんじゃなくて。

>retainする必要があるのはautorelease poolのサイクルの外で取得したオブジェクトを使いたいときですよね。

上の文は、「サイクルの外で」で切れるんだろうなあ。最初「外で取得した」と読めた。

ともかく、getter の中で何をやっているのかわからないときがあって(ソースのないクラスとか)、
そうするとオブジェクトが autorelease pool に登録されてるかよくわからないだろ。

645:名称未設定
07/11/18 13:27:12 xb1Ii9wH0
「よくわからない」、じゃなくて、
getter から返ってきたのをインスタンス変数等に
保持したい場合はretain しないといけない、
保持しないで今の関数で使い捨てのときはなにもしなくていい、
というのが「きまり」じゃないの?

getter はそう使われて問題ないように組みなさいということのはずでしょ。
すくなくとも Cocoa の API は全部そうなっているんでは。

ネットに落ちてるフリーのライブラリもそれに準拠してると思ってたけども。

URLリンク(developer.apple.com)

646:名称未設定
07/11/18 14:17:29 6Cn1RaWD0
>「よくわからない」、じゃなくて、
>getter から返ってきたのをインスタンス変数等に
>保持したい場合はretain しないといけない、
>保持しないで今の関数で使い捨てのときはなにもしなくていい、
>というのが「きまり」じゃないの?

そんな基本的なレベルの話じゃなくて、「今の関数で使い捨て」しようとしたときでも、
getterの直後に別スレッドでsetterが呼ばれて、(getterによって返された)古いオブジェクトが解放された
とか、
getterの直後に別スレッドが(そのgetterメソッドを持っている)オブジェクトを解放した
とかいうケースの話をしてるんじゃないの?
こんな場合にも対応するには、getterによって返されるオブジェクトがたとえ「今の関数で使い捨て」であったとしても、
それをautorelease poolに入れるというのが一つの手なんだけど、それを誰がやるのか、ってことでしょ。

647:名称未設定
07/11/18 14:49:43 xb1Ii9wH0
なるほど、それは失礼しました。
Cocoa のマルチスレッドは全く判っていないので、勉強します ...

648:名称未設定
07/11/18 15:17:43 6Cn1RaWD0
>getterによって返されるオブジェクトがたとえ「今の関数で使い捨て」であったとしても、
>それをautorelease poolに入れるというのが一つの手なんだけど、それを誰がやるのか、ってことでしょ。

で、getterを呼び出した側でretainしようにも、その前に別スレッドで解放されたら終わりなので、結局getter自身でretain-autoreleaseするしかないと。
てことは、thread-safeを謳っているライブラリについては、getter側でretain-autoreleaseしていることを想定していいのかなぁ?

649:名称未設定
07/11/18 21:52:08 MNuVJVruO
Cocoaは難しい

650:名称未設定
07/11/18 22:23:41 DA9RCPIX0
確かに安定したソフトを作るのは難しいかも
まあ、リソースを確保したままで終わるような簡単なソフトは簡単だけどね

651:名称未設定
07/11/19 15:27:16 02ojrBP20
Cocoaってそんなに難しいのか? 比較対象がToolboxしか知らんからわかんね。

652:名称未設定
07/11/19 15:38:10 LV7+iq+v0
Toolboxに較べたら簡単だろう。Toolboxみたいに冗長で神秘の呪文を何度も
唱える必要がないだけでもありがたいくらいだ。部品も結構揃ってるので
本来やるべき仕事の部分に集中出来る。

653:名称未設定
07/11/19 16:40:12 LvFFLwZ10
フレームワークの充実度で圧勝。

654:名称未設定
07/11/19 17:00:29 PeaucL070
Toolboxに比べる事自体Cocoaに失礼

655:名称未設定
07/11/19 17:44:27 In4q82oq0
Interface builder にでてくる File's Owner, 1st Responder というのを理解するまではわけわからんかったが、その後は楽勝だった

656:名称未設定
07/11/19 17:52:00 9E3IVsAz0
このスレ住人のXcode 3.0への移行具合はどうよ

XcodeでClassを書く(Interface BuilderでClassが作れない)
Interface BuilderでのAnimationが設定できる
などなど変更点山盛りで覚えること多数で苦戦してんだけど

657:名称未設定
07/11/19 17:55:48 In4q82oq0
確かに instantiate class... というメニューが
IB になかったからどうしようかしばらく困った。
でもこれまでからなぜか Xcode でクラス作ってたのでそんなに変わってないです。

あと自分用の小さなソフトしか作ってないので、
GC on にして手抜きしまくりです。

Animation のつかいかたは判ってないです ...

658:名称未設定
07/11/19 18:13:08 LV7+iq+v0
IBからクラスを生成するとヘッダやソースのコメントが抜けてさみしいので
大抵の場合クラスを作ってからIBでactionやらoutletにつなげてた。
さすがにXcode3.0には戸惑ったが、まぁ何とかなりそうだ。

659:名称未設定
07/11/19 19:00:01 PeaucL070
>>658
> Bからクラスを生成するとヘッダやソースのコメントが抜けてさみしいので
> 大抵の場合クラスを作ってからIBでactionやらoutletにつなげてた。
俺も同じw

660:名称未設定
07/11/19 19:55:30 dZtoqNKV0
InterfaceBuilder3.0では、
Main.nibの中にFile'sOwnerとApplicationっていうインスタンスが入っているけど、
これって同じもん?っていうか前はFile'sOwnerがIB上からのApplication
インスタンスへの入り口ってつもりだったんだが。。。

661:名称未設定
07/11/19 21:10:34 uwOj8SG90
MainMenu.nibの場合は、同じ。

662:660
07/11/19 21:51:45 9Yj++wrA0
>>661
ありがと。ってことはMainMenu.nib以外では、違うってことだろうか。
ちょっくら試してみます。

 あと、IB3.0のライブラリには、いろいろ便利そうな新規クラスが
 入っているみたいだけど、これらの使い方をどこかのスーパー
 プログラマーがさっくりと分かりやすい日本語チュートリアル
 作って公開してくんないかなー。(他力本願)

663:名称未設定
07/11/19 21:56:31 PeaucL070
URLリンク(journal.mycom.co.jp)
に、
- (NSString*)name
{
@synchronized(self) {
return [[_name retain] autorelase];
}
}
ってコードがあるけど、ここの@synchronizedの対象って_nameじゃダメなの?

664:名称未設定
07/11/19 22:01:37 MSo6PDwW0
それにしても独特な開発環境だよね
洞察力の訓練には最適かもw

665:名称未設定
07/11/19 22:34:43 KUTYWe1G0
>>663
setName:をどう書くか悩むからだめ。

666:名称未設定
07/11/19 23:08:49 +8DQ+G5D0
そういえばnilへのsynchronizeの挙動って定義されてたっけ?

667:名称未設定
07/11/20 12:18:19 xK/rJZ3Z0
>>662
File's Owner はその NIB を開いた際にプログラム側から nib's owner として登録されたオブジェクトになる。
MainMenu.nib は自動的に NSApp が開いて、File's Owner は NSApp。
ドキュメント型ソフトのばあいは、NSDocument が nib を開くので、
File's Owner は自分でつくった NSDocument のサブクラスになる。

それ以外に nib をつくって、自分でプログラムからあからさまに開く際は
File's Owner を自分で設定する。

668:662
07/11/20 19:03:19 vX1nP8Nx0
>>667
なるほど!っていうか初めてFile's Ownerの
役割が分かりますた。
簡潔且つ的確なご説明ありがとうございます。

669:名称未設定
07/11/21 20:17:19 G817xlPC0
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;
の中でmenuItemに対してsetState:とかtagを呼ぶと
'tag' not found in protocol(s)
とか言われてしまうんだけどなんでだろう?

670:名称未設定
07/11/21 22:56:41 sg+XtEJO0
知らんけど、NSMenuItemがプロトコルだからじゃね?
- (BOOL)validateMenuItem:(id <NSMenuItem>)menuItem;//引数menuItemはNSMenuItemプロトコル
- (BOOL)validateMenuItem:(NSMenuItem*)menuItem;//引数menuItemはNSMenuItemクラス
って事かなー。




671:名称未設定
07/11/21 23:17:07 hTxVVTev0
>>669
まずヘッダを確認してみてはいかがでしょう。
ウチのxCode2.4ではdeprecatedだけど一応使えるみたい。

672:名称未設定
07/11/22 00:53:05 NI+W3MNs0
ありゃ、プロトコル自体がdeprecatedだったのか
警告が「プロトコルの中にないよ」って書いてあるもんだから、
NSMenuItemプロトコルの中を見てちゃんとあるのに変だな~と混乱してた
失礼しました

結局>>670みたいに書き直しなさいということね

673:名称未設定
07/11/22 11:59:27 Krn36QQ60
質問です。

まずNSWindowのサブクラスMyWindowにNSViewのサブクラスMyViewが乗っています。
ここでMyWindowにinitWithContentRect:をオーバライドして、
中で[super initWithContentRect:...]と典型的な初期化をしているのですが
この引数に任意のrectを渡した場合にMyViewのサイズを合わせるにはどうすればいいのでしょうか。

IBでAutosizingを設定しても聞いてくれなくて。

674:名称未設定
07/11/22 17:12:56 kaRw/iTz0
行を選択するたびにそのイベンオをとらえて処理をしたいと考えてます。

- (IBAction)tableViewSelected:(id)sender
{
    row = [sender selectedRow];
    NSLog(@"the user just clicked on row %d", row);
}
そこで,上記では行を選択すると選択した行番号を得られるのですが,
行番号ではなくオブジェクトを得られる方法はありますか?

IBAction はCore Dataで作ったTableViewとAppDelegateでつないであります。
なので、クリックされた行のNSManagedObjectが得られるといいのですが,
直接的な方法はないものかと。


675:名称未設定
07/11/22 21:10:09 a/peNeZj0
NSArrayController 使って bind させればいいんじゃないの?

676:名称未設定
07/11/22 22:03:28 GA2XBdAS0
> まずNSWindowのサブクラスMyWindowにNSViewのサブクラスMyViewが乗っています。
> ここでMyWindowにinitWithContentRect:をオーバライドして、
> 中で[super initWithContentRect:...]と典型的な初期化をしているのですが
> この引数に任意のrectを渡した場合にMyViewのサイズを合わせるにはどうすればいいのでしょうか。

状況がいまいちよく分からないが、
MyWindowの上にMyViewが乗ってるっていうのは、IBで乗せてるの?
ならば、nibファイルからMyWindowが生成されるので、初期化にはinitWithCoder:が使われるはず。
initWithContentRect:でMyWindowを生成しているなら、手動でMyViewを乗せることになるはず、
IBでAutosizingを設定っていうのも、ちょっと変な気が。

677:名称未設定
07/11/22 22:22:26 Krn36QQ60
>>676
IBでMyWindowにMyViewを乗せています。
@implementation MyWindow
- (id) initWithContentRect: ...
{ NSWindow* w = [super initWithContentRect: ...]; return w; }
@end
のような記述をしていて、このときMyViewは手動で乗せなくても表示されています。

また、Autosizingでウィンドウに合うようにMyViewを―~~―な状態にしておけば、
ユーザがGUI上でリサイズをしてもMyViewのサイズが変わっています。

表示した後マウスでリサイズする分には問題が無いわけですが、
上記initWithContentRect:の中で任意のrectを指示した時に
初期のMyViewのサイズがIBで指示したサイズになってしまうのです。
これは手動でMyViewを生成するべきなのでしょうか?


678:名称未設定
07/11/22 23:50:05 T7a7mhhK0
>>677
awakeFromNibで設定するのが簡単だと思う。

679:名称未設定
07/11/23 00:34:54 1Oijf2vw0
>>677
IBでインスタンス化したオブジェクトはアーカイブされてnibファイルに格納されて
プログラムで読み込むときはアンアーカイブして取り出すので
初期化メソッドはプログラム中では呼ばれない

はず
nib上のオブジェクトを初期化するにはawakeFromNibを使いましょう

680:674
07/11/23 10:22:00 GeUHqHT60
>>675
どうも
NSArrayControllerを使ってBindするというのは、
具体的にはどうすればいいのですか?

NSArrayControllerのインスペクタのBindをみても
NSTableViewのクリック関する項目はないのですが。

681:名称未設定
07/11/23 10:49:36 hcJ8Hx2n0
NSTableView の binding のところで、中身を
NSArrayController の content とかに設定して、
NSArrayController のほうを CoreData につないでください。
ADC のどっかにチュートリアルがあったはず。

682:675
07/11/23 12:06:28 gHJ1tYgX0
>>680
行の選択が変化したかどうかは KVO で見る

NSArrayController の例えば selectionIndex とかを addObserver で登録して、
observeValueForKeyPath の中で、そのときに NSArrayController に
選択されている NSManagedObject を取り出す


683:674
07/11/23 12:37:53 GeUHqHT60
>>682
>>681
素早い応答ありがとうございました。

ADCのチュートリアルを教えてください。
Core Data Programming Guideをみたり
table view bind で検索しましたが,
それらしいものが見つからなくって。

まだまだ初心者なので,インスペクタの設定や
サンプルコードがないとピンとこなくて。
すいません。

もしサンプルプロジェクトをダウンロードできるサイトがあったら
教えてください。

684:名称未設定
07/11/23 12:51:39 hcJ8Hx2n0
英語だけど、apple のこれ
URLリンク(developer.apple.com)
はビデオ付き。まさに tableview につないでるから。
あと、Scott Stevenson の
URLリンク(cocoadevcentral.com)
もわかりやすい。
というかそこの記事はどれもこれもわかりやすいので、おすすめ。

あと、mkino さんのところにも解説ありそうだけど、どうでしょう?
すくなくとも本の第三版にはのってるらしいけど、持ってないのでわからん。


685:名称未設定
07/11/23 13:02:19 iA/8JIe10
binding ってバカを量産する仕組みなんだろうか

686:675
07/11/23 13:08:18 gHJ1tYgX0
>>683
table view の bind じゃないです

MVC のパターンにして
M: Core Data
V: NSTableView
C: NSArrayController
で、それらの間を binding で結んで、table の変化を見るのではなくて
NSArrayController の selection の変化を見る、ということ
で、NSArrayController の selection の変化は key value observing で見る

アプリケーション本体の方には NSTableView ではなく
NSArrayController の方をつないで、そこに選択されている
NSManagedObject を取り出せば、それが NSTableView で
選択されている NSManagedObject と同じものになります

サンプルコードはわからないけど、ドキュメントなら、
Core Data Programming Guide 以外なら
Cocoa Bindings
URLリンク(developer.apple.com)

Key Value Observing
URLリンク(developer.apple.com)

とか


687:名称未設定
07/11/23 15:23:08 NQ+7IO3Q0
>>685
自分の頭の中のCocoaはbindingが導入される前で止まってるw
未だに使った事が無い恐がりの俺

688:名称未設定
07/11/23 15:40:43 vBC4oFan0
bindingとpropertyは職業プログラマ用だろ。
garbage collectionは量産しそうだけど、いいんでない?

689:名称未設定
07/11/23 16:07:53 hcJ8Hx2n0
>>687
binding は Panther で追加された頃は IB での扱いがひどかったけど、
(設定しても反映されない等、)最近は随分安定している気がする。

690:名称未設定
07/11/23 16:08:47 40+P0Y410
>>688
いや、Bindingだけは素人でもきちんと使えるようにすべき
MVC、KVCできちんと書けるようになるからな


691:名称未設定
07/11/23 17:45:45 /aNuome90
メモリ管理をあまり理解しないまま、KVCを使っていると知らない間に
大量のメモリリークを生みだしそうな気がする
まあ、GC前提なら問題ないけどね

692:名称未設定
07/11/23 19:05:51 gj7dOudc0
>>689
俺未だにPanther使ってるけど、そんなことないぞ。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch