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/03(月) 16:13:20.15ID:aNJ5eidf
>>31
言いたいことはまさにそこだったw
要は、Objective-CはOOP部分を「コンパイル」してない
2014/11/03(月) 16:15:28.17ID:bxypX2So
(マジで言っているの?... もういいや)
2014/11/03(月) 16:27:58.86ID:goVpsTzK
予想通り発狂した ID:bxypX2So がスレ埋めてて笑ったw
最初の数レスだけからして基地外臭が漂ってたからな。
2014/11/03(月) 16:29:25.64ID:eMtWYvPU
>>26
>もちろんObjective-CでもCの呼び出しはセレクタじゃないのは理解しているよね?
そりゃ当たり前じゃなかろうか?
2014/11/03(月) 16:36:01.84ID:bxypX2So
>>35
すぐに発狂とかww冗談の通じないヤツ?

>>36
いや、なんでいきなり>>24と言い出すのかと。当たり前でわかっているならいいよ

なんなんだこのスレは
発狂して消えようw
2014/11/03(月) 16:40:51.63ID:aNJ5eidf
>>37
ちなみに、
> @implementation
> の中に書けるから?クラスの中にあると思ってるの?
は違うの??
恥ずかしながら、てっきりそうだと思ってたけど…
2014/11/03(月) 18:55:13.00ID:rWxTBzmZ
@Implementationの中に書くと前方宣言いらんのやで。豆。
2014/11/05(水) 19:33:36.62ID:WwM6K55L
>>39
どゆこと??
2014/11/05(水) 20:19:08.13ID:12YCeqJI
関数プロトタイプをずらずら書かなくていいという事。
2014/11/05(水) 21:38:12.10ID:WwM6K55L
>>41
なるほど
プロトタイプ宣言が要らないということはわかりました
でも、それってつまりどういうことを意味してるの?
>>31とも関連あったりする??
2014/11/06(木) 04:04:34.15ID:iVGs5M/e
@implementation〜@end内は、なんかしらんが順番を気にしなくて良くなったから便利って話、
>>31とは関連は無い。
それと関数はクラスメンバじゃないよ。
44デフォルトの名無しさん
垢版 |
2014/11/06(木) 21:11:41.06ID:4Om1v5TR
>>43
ただの関数なのでクラスメンバにはなり得ないのはわかる
Objective-Cの場合は、こういう風に普通にCの関数をクラスないに
何も考えずに書いちゃっても、しっかりクラスメンバとしてのメソッドと関数を
綺麗に分離できる文法体系になってるのが素晴らしいと思うんだけど
Objective-Cだけの話じゃないのかな
2014/11/07(金) 05:47:11.47ID:xhNEAT8L
void ClassA::FuncA( void ){
….
}

void FuncC( void ){
}

void ClassA::FuncB( void ){
}
46デフォルトの名無しさん
垢版 |
2014/11/07(金) 07:50:28.25ID:NRYdimHv
うむ
47デフォルトの名無しさん
垢版 |
2014/11/08(土) 07:39:56.00ID:p1cfQewS
>>45
でも呼び出しのときは、Objective-Cなら、メッセージ式と普通の関数呼び出しで
全く違うけど、C++だと、クラス内からだと区別つかなくね?
thisポインタ使わないこと多いし
2014/11/08(土) 08:17:04.46ID:FLsnICPe
でもでもうるせーやつ。未熟極まりないのに自覚がないのは恥ずかしくないのか
2chで匿名だからか
2014/11/08(土) 08:30:45.39ID:p1cfQewS
>>48
…。
2014/11/08(土) 11:45:42.73ID:p1cfQewS
しかしなんでこの言われようなんだろう
でもでもって、初レスだけど何か勘違いしてんのかな
結構、プログラミングスキル以前に人間性に難ありな人が多いのかねプログラマって
2014/11/08(土) 11:50:13.50ID:imGXi3N2
プログラマーとか関係ない
ここが2chだからでしょ
2014/11/08(土) 12:01:11.42ID:FLsnICPe
>>50
初レスって。うそくせーなあーw 本当に別人ならすまんかったな

だが、本当に上にいる「全く同じようなヤツ」と別人なら、このスレはお先真っ暗だなw
(別人でなんで「でも」から始まるのか??ああ、同じ思考・し好だからか…んなアホなっと思いたいw)
2014/11/08(土) 13:28:07.51ID:p1cfQewS
いやもういいっす
別に大した内容じゃないですし
54デフォルトの名無しさん
垢版 |
2014/11/13(木) 08:03:27.53ID:TEV0paWH
セレクタと関数ポインタの違いがよくわからないのですが、
どなたかおわかりになりますでしょうか?
2014/11/13(木) 08:06:46.99ID:1iY71Yqc
selfの有無じゃね
2014/11/13(木) 08:16:17.56ID:lmsym3p3
SEL はメソッドの名前でしょう。
メソッドは、クラスとセレクタとクラスorインスタンスのどちらであるかによって得られる。
Method class_getInstanceMethod(Class cls, SEL name)
Method class_getClassMethod(Class cls, SEL name)

そしてメソッドは実装である関数ポインタ、IMPを持っている。
2014/11/13(木) 12:31:08.08ID:Jx3Jj8A2
セレクタ: レシーバが、実行する関数実装の特定に用いる識別子
関数ポインタ: ある「ただひとつの」関数実装へのポインタ
セレクタは複数の関数実装に結びつきうる(ポリモーフィズム)が、関数ポインタはそうでない
セレクタに対応する関数実装のうち、ただひとつを特定したものがIMP。これがCの関数ポインタそのもの。
2014/11/13(木) 12:47:07.08ID:bBKFMYMs
メソッド呼び出しの仕組みが解れば違いも解るだろう。
2014/11/13(木) 12:48:05.58ID:dS9drdDA
message送っても別スレッドになる訳じゃない
60デフォルトの名無しさん
垢版 |
2014/11/13(木) 22:15:25.29ID:TEV0paWH
みなさま、早速のレスをいただきありがとうございます。
メソッドには、セレクタという名前がついていて、IMPという関数ポインタも
同時に持っているということですね
>>57さんのレスで、セレクタはポリモーフィズムを持つとのことですが、
この意味は、例えば引数の型違いで定義されたオーバーロードされた
メソッドのセレクタは同じになるが、オーバーロードされているそれぞれの
メソッドのIMPはそれぞれ異なるアドレス値(関数ポインタ)を持つという
理解でよろしいでしょうか?
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
なるほど、親子関係をハッキリさせておけば確かに起きないですね。
こんな興味本位の質問に答えて頂いてありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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