Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2014/11/01(土) 13:35:17.70ID:12FSUUrY
Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
 (Wikipedia:http://ja.wikipedia.org/wiki/Objective-C より)

前スレ
Objective-C [ObjC part:8];
http://peace.2ch.net/test/read.cgi/tech/1356341803/

Objective-C [ObjC part:7];
http://toro.2ch.net/test/read.cgi/tech/1330330906/
Objective-C [ObjC part:6];
http://toro.2ch.net/test/read.cgi/tech/1313891268/
Objective-C [ObjC part:5];
http://hibari.2ch.net/test/read.cgi/tech/1279730299/
Objective-C [ObjC part:4];
http://pc12.2ch.net/test/read.cgi/tech/1239721860/
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
2014/11/13(木) 23:46:43.15ID:P2x2UIfS
>>60
オーバーライドとオーバーロード(多重定義)をごっちゃにしてるよ
というか、そもそも Objective-C にオーバーロード(多重定義)は無い
2014/11/14(金) 06:16:40.90ID:kMYuuo8x
>>60
あれこれ考えるより、まずここ読んだ方が早いだろう。
http://news.mynavi.jp/column/objc/018/

あとは自分でいろいろやってみりゃわかる。
2014/11/14(金) 08:01:02.15ID:DLTXyjTW
>>60
例えば、継承関係のないクラスAとB(どっちもNSObjectの直接のサブクラスとか)があって、どっちもdoSomethingメソッドを持ってるとする。
IMPはメソッドの実体を指してるから、AのdoSomethingとBのdoSomethingではIMPは異なるし、AのインスタンスをBのIMPに喰わせると誤動作する。
セレクタは"doSomething"というメソッド名そのものなので、同じセレクタを使ってAにメッセージを送ればAのメソッドが、Bに送ればBのメソッドが実行される。
64デフォルトの名無しさん
垢版 |
2014/11/15(土) 07:45:53.26ID:Cmo7am1O
皆さん、ありがとうございます
レスおそくなりました

>>61
Objective-Cにはオーバーロードはないのですね
Javaは勉強していたので、オーバーライドとオーバーロードの違いは
理解していましたが、Objective-Cではないとは思いませんでした…
メソッドの引数の型は、書き方からすると、もしかしてキャストなんでしょうか。。

>>62
ありがとうございます
そのページを読んで勉強してみます

>>63
なるほど、非常によくわかりました
どうもありがとうございます
2014/11/15(土) 12:19:59.41ID:atvcQtVA
>>61>>60がオーバーロードとオーバーライドをごっちゃにしていると言っているけど、ごっちゃにはなってないと思う
で、オーバーロードが無いということだけど、例えばC++やJavaみたいに、
同じsomethingというメソッドで、引数がstd::stringか、intかで、
void something(std::string str);
void something(int num);
という風に同じ名前のメソッドを同じクラスで定義して、引数の型によって切り替えることはできないよ、ということ。
引数によって処理を変えたい場合は、With〜とかUsing〜とかつけて、セレクタを変えるのが、Objective-Cの作法。
- (void)somethingWithString:(NSString *)str;
- (void)somethingWithInteger:(NSInteger)num;
2014/11/15(土) 12:23:50.50ID:lOoQn8Qz
>>64
>Objective-Cにはオーバーロードはないのですね
>Javaは勉強していたので、オーバーライドとオーバーロードの違いは
>理解していましたが、Objective-Cではないとは思いませんでした…
で終わっていることじゃ?何を改めてなのかイミフ
2014/11/15(土) 12:26:57.21ID:lOoQn8Qz
>>64
>メソッドの引数の型は、書き方からすると、もしかしてキャストなんでしょうか。。
キャストではないよ型だよ。Cと同じだよ。単なる値渡し
暗黙的型変換があるけど、キャストとは呼ばないだろう
2014/11/15(土) 12:29:54.67ID:atvcQtVA
>>66
悪い悪い、ようするに後半の引数の型によって処理をわけたいならObjective-Cではセレクタを変えろということを言いたかったんだけど
前振りでオーバーロードの説明を挟んだせいでくどくなっちゃった
そんなに怒るなよ
2014/11/15(土) 12:33:58.59ID:lOoQn8Qz
なんで怒ることあるねん
読んでもなんで書いているのか意味分からないから意味分からないってだけだよ。怒られるような書いたの?w
オーバーロードが無いんだからそらそうだよな、ふーんってくらいだよ
70デフォルトの名無しさん
垢版 |
2014/11/15(土) 13:43:28.84ID:Cmo7am1O
ありがとうございます
なんだか、私の書き方が悪く、いろいろとすみません

>>65
そうですね
私がなじみがあるのはそのように引数の型や数が違うオーバーロードですが、
Objective-Cでは同一セレクタでのオーバーロードは不可なのですね
確かにLCCでつないで〜With〜のようなメソッド名はCocoaではいろいろ見かけます

>>67
やはり型なのですか
もしかして、キャストだから実行時に解決されてオーバーロードという仕組みが
なかったりするのかなと思いましたが、キャストではないのですね
>>62さんのリンク読んでみると、(char *)型のmethod_typesというものも
あるようなので、それをみればオーバーロードの実装も出来るのではと
思いましたが、Objective-Cのポリシーなんでしょうかね…
2014/11/15(土) 13:51:55.93ID:lOoQn8Qz
無くたって別にどうということは無いと思うんだけど、なぜ拘る?w
72デフォルトの名無しさん
垢版 |
2014/11/15(土) 13:59:38.62ID:Cmo7am1O
>>71
あっ、いや、特にこだわっているというわけではないのですけど、
Java, C++, C#などではいわゆるオーバーロードが出来たので、
ちょっとビックリしました…
汎用的なライブラリを作る時は、同一メソッド名の型違いでオーバーロード
しておいた方がいろいろと使い勝手のよいものになるので、結構重宝してた
のですが、Objective-C使いさんは、型違いは全て>>65さんのように
セレクタを変えて使っているんですね
よくよく考えると、引数の数違いの場合は、必然的に:が追加されてセレクタが
変わるので、そもそもオーバーロードという概念ははじめから考えてなかった
のかもしれませんが…
2014/11/15(土) 14:06:01.65ID:lOoQn8Qz
>>72
使い勝手いい?よくわかんないなあ。単に関数名/メソッド名考えるのめんどくせーってのが緩和されるぐらいのような

メソッド呼び出しから始まったようだけど、Message Forwardingをちょっと勉強したらおもろいよ。なんでメッセージなのかもわかるかと(ここらがオーバーロードに関連しているような関連していないような)
74デフォルトの名無しさん
垢版 |
2014/11/15(土) 14:15:15.80ID:Cmo7am1O
>>73
使う側からしても、型が違ってもメソッド名が同じな方が使いやすいかなと
思ったりしますが、確かになくてもよいといえばよいですね
使う側も渡す引数の型を意識してコーディングするので、むしろ
よいかもしれませんね

Message Forwardingですか。この辺りを読み込んでみます
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtForwarding.html

ありがとうございます
2014/11/15(土) 14:35:07.73ID:O7G7JpVO
メソッドの解決を名前だけでなく型でもやろうとすると何気に大変
仮にあるクラスAに
-(void)foo:(NSObject*)x;
-(void)foo:(NSNumber*)x;
-(void)foo:(NSString*)x;
という3つのメソッドがあったとして
[a foo:x];
のように呼んだとき、どのメソッドを呼べばいいかはxの型だけでなく継承関係も調べないといけない
例えばxがNSMutableStringだったらNSStringのやつを呼んでほしいだろう
NSMutableStringはNSObjectでもあるわけだがNSStringの方がより特殊なので優先度が高い
そうなるとメソッドを優先度で並べて型が該当するか上から順に調べねばなるまい
実行時のコストとして許容できるかどうか
2014/11/15(土) 15:19:15.90ID:RzrSosLr
藻舞は何をオーバーロードで、クダ巻いとるんじゃ。
普段からそんなに高品質な言語ばっかり、使っているからじゃ

JavaScriptなんか、引数の型を一々、
プログラマーがプログラミングして確かめるんだぞw
そうでないと、まともに動かんわいw

グダグダ言う前に、これくらい自分でプログラミングせえ!
2014/11/16(日) 19:14:57.26ID:PTffpO77
基本的にObjective-Cは
クラスはロボットで「これやれ」って命令すれば勝手にやってくれる
もしわかんないことがあったら「なにができるんだ?」って聞けば
「これができますギチギチ」って答えてくれる
そういう風じゃないと命令者に複雑さが伝播してオブジェクト単位で弄れないだろ?
っていうオブジェクト指向の思想理念に忠実だからな…
2014/11/16(日) 19:35:21.60ID:4B0DOTZq
Objective-C、やはり素晴らしいじゃないか
2014/11/16(日) 20:32:06.09ID:y1asw4VY
Objective-CやSmalltalk、Rubyの失敗によって、
そういうアラン・ケイのメッセージ送信パラダイムが間違っていたということが証明されたから
C++やJava風の静的束縛パラダイムに移行しようということでできたのがSwiftなんだけどな
2014/11/16(日) 21:25:59.70ID:jkITM5Sp
>>79
> Objective-CやSmalltalk、Rubyの失敗によって、

失敗したのはストラウストラップ流オブジェクト指向の C++
MS はコンポーネントの動的結合を実現するために COM を開発したが、
結局は対応しきれずに C# へ移行せざるをえなかった
この移行に伴う混乱が Vista 以降の度重なる開発遅延をまねいた


> C++やJava風の静的束縛パラダイムに移行しようということでできたのがSwiftなんだけどな

いや、Swift は(Objective-C と同じく)動的束縛と静的束縛のハイブリッドだよ
コンポーネント間の結合はこれまで通り(メッセージ送信パラダイムによる)動的束縛が利用される
コンポーネント内部の実装に静的束縛を用いるのもこれまでと同じだけど、違うのは
メモリ保護の無い C を捨てて安全なプログラミングを可能にした点


MS は MFC(C++) を捨てて .Net(C#) へ移行せざるを得なかった
Apple は言語を Objective-C から Swift へと移行しようとしているけど、
実行環境は Cocoa を継続して利用できている
結果を見れば、失敗したのは ストラウストラップ流オブジェクト指向の C++ なんだよ
2014/11/16(日) 21:35:15.07ID:cjwSUl7C
>Objective-CやSmalltalk、Rubyの失敗によって、
…どれも失敗してないように見えるが…
というか、これから歴史が判断するとは思うが
C++みたいな密なコーディングを必要とするのに規約ゆるゆるの
言語で起きた混乱のせいで、規約カッチリすればイインダヨ!な
関数型が注目されてるけれど、結局密なプログラミングは
後で他人がソースを弄りにくいという根本的な問題をほっかむりしてる
っつーよりそもそも"そういうもの"として問題にもしてないようにも見えるので
遠からずまた一過性の時代の徒花として忘れられて
swiftに取り入れられてるみたいに「そういう書き方できたら便利だね」的な
過去に提唱された便利概念に落ち着いてゆくと思う。
2014/11/17(月) 00:12:14.50ID:ZeG9cYbU
 blocksやgcの件からわかるようにObjective-Cが古臭く拡張しづらくなったのと、
静的言語の方がリファクタリングツール等のIDE連携ツールを作りやすいから移行し
ただけだと思う。
2014/11/17(月) 02:45:35.45ID:cESIq0Cd
> というか、これから歴史が判断するとは思うがC++みたいな密なコーディングを必要とするのに規約ゆるゆるの言語で起きた混乱のせいで、規約カッチリ
> すればイインダヨ!な関数型が注目されてるけれど、結局密なプログラミングは後で他人がソースを弄りにくいという根本的な問題をほっかむりしてるっ
> つーよりそもそも"そういうもの"として問題にもしてないようにも見えるので遠からずまた一過性の時代の徒花として忘れられてswiftに取り入れられてる
> みたいに「そういう書き方できたら便利だね」的な過去に提唱された便利概念に落ち着いてゆくと思う。

これで一文
2014/11/17(月) 04:06:46.80ID:mzmuQz/D
パラダイムと規約に関係があるとは知らなかったよ
2014/11/17(月) 08:16:03.02ID:zHATB9tj
>>82
GCは よりな ARC が現れたから単に消えただけだじゃね
System Preferences PaneがGC必須だったようにARC出るまではGC推すつもりあったかと
BlocksだっていろいろBlocksバージョンのメソッド付け加えているように、また、新しいメソッドはBlocksのみだったりでBlocksは推してはいるだろ

拡張しづらくなったのではなく、ちゃんぽん/カオス度がだろう
2014/11/17(月) 16:59:55.46ID:oWS5dSpx
うわぁ、頭悪そうな文章。

>>85
言葉が足りないとか、馬鹿とか言われたりしない?w
2014/11/17(月) 17:27:43.93ID:3Q29PYZj
「あまり強い言葉を遣うなよ、弱く見えるぞ。」
2014/11/17(月) 17:35:24.26ID:zHATB9tj
>>86
お前の程度に合わせて書いてあげることもできるが、お前の程度がわからないのでなあ。すまんな
2014/11/17(月) 17:37:36.18ID:YUWmI/Qt
エンジニアになりたいと言う人(若い女の子)が面接に来ていたので話を立ち聞きした
どんな分野やりたいのか聴かれてweb系のエンジニアと言ってたが
どんな勉強してきたのかという問いにはC/C++をやりましたと
なぜC/C++なの?と聞かれて
色んな言語の基礎になる言語だからだと教えてもらったので・・・
と答えていた
面接してる会社はデザイン会社だった
2014/11/17(月) 19:21:26.75ID:JwoO3TSc
ID が Qt
2014/11/17(月) 19:37:02.05ID:kiWqo9or
QtはライセンスがGPLだから駄目
2014/11/18(火) 08:24:29.44ID:kE9ttoYj
>>87
これ
「弱いやつほどよく吠える」
2014/11/18(火) 09:48:40.84ID:vZbeIuzJ
>>92
頭が―か?
2014/11/19(水) 00:25:30.52ID:Uu5NHBSW
医療プログラマーが超高難易度の免許制に / フリーソフトやオープンソースの無作為配布も全面禁止
http://fox.2ch.net/test/read.cgi/poverty/1416286592/
2014/11/19(水) 12:35:17.12ID:JZ2oYyd9
>>89
gccですか?VCですかそれともObjective-Cですか?と聞かなかった会社が糞
96デフォルトの名無しさん
垢版 |
2014/12/01(月) 22:56:51.54ID:m0wFwcIO
Objective-CをCocoa以外で活用してるケースってあるのかね
2014/12/06(土) 17:27:29.67ID:0UG7+0Oi
Effective Objective-C 2.0
2014/12/06(土) 17:27:59.31ID:0UG7+0Oi
とかいつの間にか出てたみたいだが、内容はどうなのかね
99デフォルトの名無しさん
垢版 |
2014/12/21(日) 03:29:15.03ID:B0izS0B+
H
2014/12/24(水) 22:47:32.30ID:CYbjoPN5
>>11-38
お前らどこ逃げてんだよ?
さっさとID真っ赤にしてスレ埋めろや基地外どもめ。
2014/12/24(水) 22:49:51.21ID:CYbjoPN5
何このスレ、ほかのやつも馬鹿ばっかじゃん。
Objective-Cはもうオシマイだな。
2014/12/24(水) 23:22:36.71ID:w/c96Wtd
>>100
どうした急に…。
2014/12/24(水) 23:37:50.82ID:EVdPtiwJ
マジキチには触れない
104デフォルトの名無しさん
垢版 |
2014/12/27(土) 00:50:33.94ID:ju+a0CQP
はじめて書き込みします。
自学の一貫としてpaizaのラーニング「数の並び替え」に挑戦しています。

「改行区切りで正の整数nがi個入力されるので小さい順に改行区切りで出力してください。」という問題です。しかし解けません。
数値を取得→配列に入れる→ソートする→同じ数値があれば削除→表示
という流れですすもうとしていましたが、うまくいきません。
できたこと
→入力値をNSNumberに変換してNSMutableArrayに入れ込む。
→昇順ソート(ソートのメソッドを使用)
できないこと
→改行入力を判定し、for文から抜けること(配列の要素数取得)
→隣り合った要素を比較し、イコールだった場合は表示しないこと

見本になるような答えがあればと思うのですが、プログラマーの皆さんはどのようにコーディングされるのでしょうか?
教えていただけたら嬉しいです。
105104
垢版 |
2014/12/27(土) 00:53:20.66ID:ju+a0CQP
ちなみに、現在はこんなかんじで書いています。
(for文のところの回数は適当な数です)

#import <Foundation/Foundation.h>
int main(void){
NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
NSMutableArray *array = [NSMutableArray array];
//getData
for(int i=0;i<7;i++){
int n;
scanf("%d",&n);
NSNumber *num = [NSNumber numberWithInt:n];
[array addObject:num];
}
//sort
array = [array sortedArrayUsingSelector:@selector(compare:)];
for(int p=1 ; p<7 ;p++){
NSNumber *arraynum1 = [array objectAtIndex:p-1];
NSNumber *arraynum2 = [array objectAtIndex:p];
if([arraynum1 intValue] == [arraynum2 intValue]){
printf("test====%d",[arraynum1 intValue]);
}}
for(int i=0; i<6;i++){
NSNumber *resultNum = [array objectAtIndex:i];
NSString *s = [NSString stringWithFormat:@"%d\n",[resultNum intValue]];
[[NSFileHandle fileHandleWithStandardOutput] writeData: [s dataUsingEncoding: NSUTF8StringEncoding]];}
[pool release];
return 0;
}
2014/12/27(土) 01:41:52.96ID:kBwj7yl6
https://gist.github.com/anonymous/c9c38f61e5ed5b6f7eb6
2014/12/27(土) 01:46:46.53ID:kBwj7yl6
reverseObjectEnumeratorいらなかった
というか降順と昇順を逆に覚えていた
2014/12/27(土) 02:34:15.99ID:pJ1SHZUQ
二分探索は速いだけじゃなく、外れの場合はインサートポイントが得られるという、かなりお手軽で二倍お得。自分で二分探索を書いても

for(int i=0;i<7;i++){
int n;
scanf("%d",&n);

const NSInteger count = array.count;
NSNumber *newNumber = @(n);
NSUInteger index = [array indexOfObject:newNumber inSortedRange:NSMakeRange(0, count) options:(NSBinarySearchingInsertionIndex) usingComparator:^NSComparisonResult(id obj1, id obj2) {
return [obj1 compare:obj2];
}];
if(index < count && ((NSNumber *)array[index]).intValue == n)
;
else
[array insertObject:newNumber atIndex:index];
}
2014/12/28(日) 01:32:41.16ID:t3FnsveB
そんなのNSなんたらやってないでc++で書きゃいいじゃん
2014/12/28(日) 02:21:54.56ID:9eiZ+Gka
ここになんだから Objective-C でやる/の勉強でということだろ
頓珍漢なことを言い出さんな
2014/12/29(月) 08:59:18.53ID:Z4v1tAUQ
素朴な疑問だけど、「言い出さんな」って何の書き間違い?
それともそんな言い回しがあるの? それならどんな意味?
2014/12/29(月) 10:01:01.25ID:0b80RVUG
言いなさんな
だろ
2014/12/29(月) 10:02:24.88ID:UGzXTa7o
言いなさんな
あるいは
言い出しなさんな
だと思う
114デフォルトの名無しさん
垢版 |
2014/12/29(月) 11:16:33.80ID:/fu+2Q3X
2ちゃんの住民ってアスペが多いのか
ときどき日本語の文章の意味を取り違って
真逆のレス返すひととかいるよね
2014/12/29(月) 17:32:40.50ID:0o73V2FG
よく見るが自分がそうでないとも言い切れないのであまりつっこまないようにしている
2015/01/03(土) 22:27:31.84ID:/eH07gY4
あけおめ?
117デフォルトの名無しさん
垢版 |
2015/02/03(火) 10:52:02.28ID:rDBGcWBx
Object-Cってカプセル化できないのか、しても意味ないようなことが書いてあったけど
ttp://news.mynavi.jp/column/objc/031/

・どんなクラスでも性質を変えられる。
・どんなフィールド名も追ってけばクラス名から参照できちゃう。

なら、暗証番号とか保持してるクラスを見つけてprivate/protectをpublicに変えちゃえば中見えるんじゃね?

秘匿したいプロパティを隠す方法を教えてください。
2015/02/03(火) 11:07:05.38ID:tOi9MMpi
関数内にstaticで定義すればivarListにも出ないかな。
2015/02/03(火) 22:01:35.92ID:tKBD0v6T
novocaineって分かる人います?
120デフォルトの名無しさん
垢版 |
2015/02/04(水) 11:48:21.24ID:kErMECZ6
javascript も Ruby も Python も_
121デフォルトの名無しさん
垢版 |
2015/02/08(日) 10:15:33.41ID:pR6nMOCQ
>>118
でもそれだと暗証番号とか生成して秘匿するのには使えないよね?

特にコンパイル前に暗証番号分かってるような特注PGじゃなくて汎用なのだと。

関数内static変数をキーに使って加工した暗証番号を変数として保持するとかなのかな。

これならクラスに付けてないゲッターでプロパティが知れて漏れても
メソッドで加工してるから大丈夫とか。

そしてそのメソッドでは合ってるかどうかだけ返すようにすれば推測しづらいかな?
2015/02/08(日) 11:12:28.61ID:HJEgExkV
>>121
要はIvarにしなければクラスの外からは見えないということで、
関数をsetter/getter兼用にして、その中で変数を宣言すればどうかと。

int cryptoNumber(int mode, int value)
{
static int local = 0;

//0:setter, 1:getter
switch (mode) {
case 0: local = value; break;
default: break;
}
return local;
}

まあ、関数のスコープ外からは見えないってだけだが。
2015/02/08(日) 12:27:24.17ID:pR6nMOCQ
でもその引数valueはどこかのクラス内で
何らかのプロパティとして保持されてる値が引き渡されてるわけだろ?

Object-Cは完全なるOPPなんだから最終的にはどこかしらのプロパティが保持して
それは漏れなくIvarで引用されちゃうよね?
2015/02/08(日) 12:43:20.66ID:HJEgExkV
保持するのはあくまで関数内のlocalのみだよ。
そしてセット/ゲットできるのもその関数を定義したクラス内のみ。(関数もstatic)
その値をどう生成してどう使うかにもよるし、どのレベルで隠蔽するかって事でもある。
2015/02/08(日) 12:46:03.85ID:pR6nMOCQ
あとコメントアウトしてても
//0:setter, 1:getter
はマジックナンバーになりそうな。。。

int cryptoNumber(int mode, int value)
{
const int getter = 1;
const int setter = 9;
static int local = 5;

switch (mode) {
case setter: local = value; break;
case getter: break;
default: return null;
}
return local;
}

デフォルトはエラー処理な。
2015/02/08(日) 12:53:54.58ID:pR6nMOCQ
>>124
それだと全然Object-Cっぽくないよね?
実質Cじゃん。

Object-Cでどうやってカプセル化もどきをするかってことだから。
クラスになったらばれる。

>関数もstatic
だからObject-Cはメソッド(関数)名が分かればstaticをpublicに上書きできるんだって。
2015/02/08(日) 13:05:35.56ID:HJEgExkV
そりゃObjective-Cで完全な隠蔽は無理よw Ivarとかメソッドにした時点で見えるんだから。
必要ならCで書けばいいし、書けるのがObj-Cのメリットでもあると思うし、
どういう目的でその変数を使うかわからんけど、
例えばその関数にセッターと照合の機能を持たせれば、関数外へ値を出す事も無くなる。

typedef enum {
CryptoNumber_Mode_Set,
CryptoNumber_Mode_Compare
} CryptoNumber_Mode;

BOOL cryptoNumber(CryptoNumber_Mode mode, int ivalue) {….}
2015/02/08(日) 13:20:42.38ID:HJEgExkV
っていうか、Obj_Cは「C+オブジェクトシステム」って、そこの記事に書いてなかったっけ。
2015/02/08(日) 13:39:05.07ID:wyLER5GX
Objective-Cで完全な隠蔽って無理じゃ無い?
そのためにiOSデバイスは他人のコードをデバッガ起動させてないんじゃないの?
牢破りで台無しだけど
2015/02/10(火) 01:18:01.12ID:YlSr2a8D
質問です。
自分はARCから入って、最近MRCの存在を知ったのですが
MRCしか無かった頃には、弱い参照をどのように処理していたのでしょうか?
assignは単に参照を保持するだけ…と言うことは、所有者が居なくなってもnilにならず
retainカウントがゼロ=破棄されて内容が保証できないメモリ、を参照してしまう可能性がありますよね…?
2015/02/10(火) 01:36:50.93ID:kXovpB1O
>>130
運を天に任せてた。
ってか、weakは基本的には循環retainを防ぐためのものなので、親が消されたら子も消されるような状況なら、親→子はretain(strong)、子→親はassignで問題ない。
(親以外に子をretainしてる奴がいると問題だけど…。)
2015/02/10(火) 04:43:34.61ID:aT+wxLBo
nonnull, nullable, null_resettable, null_unspecified が来ましたで
Cocoa/Cocoa Touch全部そうするのかなあ
2015/02/10(火) 05:48:15.38ID:YlSr2a8D
>>131
なるほど、親子関係をハッキリさせておけば確かに起きないですね。
こんな興味本位の質問に答えて頂いてありがとうございました。
2015/02/10(火) 18:26:56.21ID:3nLl+ggX
nonnull, nullable, null_unspecified 修飾子が加わったね
2015/02/11(水) 04:09:33.71ID:IVeIu2if
>>134
>nonnull, nullable, null_unspecified 修飾子が加わったね
これはどういう用途や目的で使うのでしょうか
2015/02/13(金) 08:06:29.09ID:9pkMuWgM
想像だけどswiftの⁉︎に相当するんじゃないの?
137デフォルトの名無しさん
垢版 |
2015/03/04(水) 23:55:50.26ID:IuCQE56I
Twitterクライアント作りたくてAFNetworkingとSimpleauth導入した
JSONのGETまでは出来るんだけどそこからtable viewに表示させる方法がわからない....

NSDictionaryとか配列とか使うのは知ってるんだけど調べても書き方が.....
2015/03/05(木) 00:08:35.68ID:U/1KqdAB
>>3
> https://developer.apple.com/library/mac/navigation/

から Table View の Sample Code 見てみ。
2015/03/08(日) 19:28:12.30ID:HPLKgVu5
超古いコードをYosemite対応に書き換え中。
NSCalendarDateを置き換えしてたんだが、
なんだか凄く面倒くさい書き方になったんだな。
一々プロパティ叩かないと使えないNSCalendarとか
NSDateFormatterとか、行数増えまくり。
Fomatterが遅いのはホント酷いな。

もう少しコンビニエンスなメソッド用意して
欲しい。
2015/03/08(日) 19:33:54.16ID:CC8CPwGl
自分で追加すればええやん?
Fomatterが遅いのは対処の仕方がいくつかはあるし、ずっと前から遅いことだろう
まあ、NSDate <-> 文字列もしくは分解は所見ではげげっというほど面倒に見えるだろうけど
2015/03/08(日) 20:10:13.17ID:WTSZ2xfx
ハゲゲッに見えて困惑した
142デフォルトの名無しさん
垢版 |
2015/03/11(水) 08:11:20.24ID:s1uWJrZ7
Table viewにcell作ってUIText view配置してTwitterクライアント作ったんだが、下にスクロールしてくとだんだん表示が重なってきてバグってしまう
同じ事起きた人解決方法知ってたら教えてください
2015/03/12(木) 01:19:13.06ID:nNmLNiHn
>>139
Cocoa Pod漁れば、便利カテゴリーがあるかもしれんが。
ちゅうか、ObjCの何が便利かってカテゴリーでオレオレメソッドを自由に追加できる
所なんだが。
2015/03/16(月) 18:10:31.38ID:BqfOZ60v
WikipediaにObj-CのランタイムがCで書かれてるって書いてるんだけど
誰もやらないような面倒臭いことをすればCの記述のみでObj-Cが書けるのか?
2015/03/16(月) 19:05:41.37ID:Nv6mM3KY
人間業じゃないと思うけど書こうと思えば書けるな
2015/03/16(月) 22:23:57.89ID:dCO+oU4w
@〜とか[ ]とかはコンパイラをごにょごにょ必要だべ。
2015/03/16(月) 22:44:42.95ID:Nv6mM3KY
いや、それも無しのCの記述のみってことなんじゃね
2015/03/16(月) 23:26:06.83ID:dCO+oU4w
Obj-Cというより、CでOOPってことやね。かなりの事はできるだろ。
blocksとかprotocolは無いけど、observer, target/actionはできるし、
構造体にretainCount持たせてコンストラクタ/デストラクタ関数を書けばMRCっぽくなるんじゃね?
2015/03/16(月) 23:55:29.64ID:BqfOZ60v
Cで書かれたObj-Cのランタイム関数群を使って
Cの記述のみで実質Obj-Cとしてプログラミングするのは可能か
という質問だった
分かりづらくてスマソ
当然だけどARCではなくMRCで
2015/03/17(火) 00:07:00.89ID:c3ZGZmTn
逆にObj-Cと言っても、Cから拡張された特有の部分(@〜とか[ ]とか)以外はCだよ。
だからCのみの記述だと、上の特有の部分が使えないって事になるかな。
その意味では、実質Obj-Cではなく実質Cでプログラミングする事は可能。
2015/03/17(火) 00:26:31.31ID:XaFY+4CG
そういう意味で、Objective-Cって、日本語の文字の特性にピッタリ相当するよね。
C++が、漢字だけ使う状況を維持しつつ、時代に合わせて全体を改良していった簡体字のポジションに符合する。
一方、かな漢字のモザイクミックスによって、外来語に合わせた柔軟性と、前方互換性の絶妙のバランスの日本語というObjective-C。
C系統のレガシー部分(漢字文化)自体を捨ててしまって、新しく文字体系を作り直してしまったハングルはSwiftみたいなもんかな。
2015/03/17(火) 00:28:23.92ID:hphSATZF
>>149
純粋なCでObjective-Cオブジェクトを扱うのは全く問題なく可能
新しいクラスのObjective-Cオブジェクトを作るのも構造体でしかないから、とてもがんばれば可能

Objevtive-Cは元々Cのプリプロセッサでしかなく、現在のclangでもObjective-CからCソースを生成できたはず
2015/03/17(火) 01:01:26.34ID:nOSd0QwC
>>150
その特有の部分がCの関数で実装されているって話だから
やろうと思えばCだけでできないかなと思った
そんなこと誰もやりたくないからこの言語が生まれたんだけどさ
WikipediaにObj-CはC++と違ってCの上位互換言語って書いてあったから
どこまで可能なのかと気になっちゃって…

>>152
なるほど
「頑張れば」可能なのね
>現在のclangでもObjective-CからCソースを生成できたはず
知らなかった
調べてみる
2015/03/17(火) 01:37:20.90ID:qWCLUX9n
調べるなら、RubyCocoaやFreePascalのObjective-C互換機能あたりがいいかも
C++のクラスは他言語から使う事はほぼ不可能だけど、ObjCは割と楽勝
2015/03/17(火) 02:09:39.21ID:9PxdASsP
#import <objc/runtime.h>
見れば色々出来ることが分かる。
2015/03/17(火) 04:25:54.29ID:k/LbPUX+
ttp://news.mynavi.jp/column/objc/
ここの連載とかもmessage送信の仕組みとかの解説が気楽に読める
157デフォルトの名無しさん
垢版 |
2015/03/17(火) 08:19:09.18ID:EJu+JoaD
>>151
なるほどとてもわかりやすい
Swiftはクソだからね
2015/03/17(火) 20:25:47.35ID:YX0UjXZ+
Smalltalkに寄せてしまえば良かったのに。
有名なSmalltalkの処理系Smalltalk/Xみたいに遅い部分だけC言語を
インラインで書く。
2015/04/16(木) 15:08:50.01ID:o308Ymfa
Textured Windowの上にカスタムビューを置いたときに
そのカスタムビューがドラッグされたときwindowが移動しないようにしたいのですが。
カスタムビューの中にカーゾルが入ったら
setMovableByWindowBackground:NO
にしてカーソルが出たら戻す方法以外に、方法はありますか?
試しにimageViewを置くとドラッグで移動しないので、何かありそうなのですがググっても分かりませんでした。
2015/04/16(木) 15:17:40.05ID:o308Ymfa
>>159
解決しました。
- (BOOL)mouseDownCanMoveWindow{
return NO;
}
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況