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
2016/02/13(土) 13:02:08.14ID:SL3t4ard
obj-cはネストしてメソッド呼び出す時の[A :[B:[C:[D pp]]]]みたいなのが
しんどいのがな。それ以外は好き。

elixirのバイプライン演算子をobj-cにつけてくんないかな。
返り値を右辺のメソッドの第一引数に渡す演算子なんだけど

[D pp] |> [C:] |> [B:] |> [A:]

みたいに書ける。
2016/02/13(土) 14:11:22.13ID:uZC7UMRg
メソッド呼び出しは、「おうクラスA、てめえBメソッドしろや」なんたけど、
メッセージ呼び出しは、「クラスA、こんにちは、Bをやってくれないかい?」なんだよね

丁寧だからネストするとちょっとうるさい見た目になるけど、
メソッドチェーンみたいな「Bした後、Cして、Dやれよ?ああん?」みたいな暴力さがない
途中でnilを返せばそれ以上詰めたりしないしね
2016/02/13(土) 14:50:30.00ID:5qx3/3HE
ClassとInstanceの関係ってC++やJava経験して来た人とかだとObjective-Cのオブジェクトは理解しくにそうだよな
Smalltalkやっとくと全然苦にならんのだけど。
Swiftでその辺隠蔽しても理解しやすいようにしたいのがAppleの意向なんだろうけど、MacとiOS開発ってSmalltalk慣れしたCプログラマ向けってのがおいらの所感
2016/02/13(土) 15:18:30.45ID:rTriq7hd
メッセージ式のネスト、最初は変態的だと思ったけど慣れたらどうってことなくなったな
Lispやってる人なんかは特にハードル低かったんじゃなかろうか
2016/02/13(土) 23:22:04.23ID:0LHJAzgL
ロボットがいて、受け付けるコマンドリストがあって
「おい、掃除しとけ」って命令すると"掃除"してくれる。
使えるロボできたら中の掃除内容変えたりして使い回す。

…Objective-Cのクラス周りのイメージってなんかそんな感じだなーと思ってるので
"プログラミング言語"実務側からの
「クラスとは構造体に関数がついたもの」「メソッドとはつまり関数」
とか"自動車とはすなわち馬なし馬車である"ぐらい変な解説に見えて
ウボァーって変な声出そうになったりする。
342デフォルトの名無しさん
垢版 |
2016/02/13(土) 23:50:23.78ID:YN1UCyzp
>>340
前置記法じゃないから違和感ある

それはさておきJavaしか知らなくてクラス指向がオブジェクト指向の本流だと勘違いしてる人にはObjective-Cは変に見えるのかねえ
2016/02/14(日) 00:15:38.63ID:PyhtsQ/D
>>341
Objective-Cは、クラスを外から見たらそのロボットで、
クラス内部の実装は、その下の変な解説って感じ。
クラスの中には、インライン関数どころかインラインアセンブラまで使うクラスがあったりで、
@interfaceは整然としたロボットだけど、内部では囚われたカッパ達が・・・

いや、もちろんそんなハードな仕事するクラスばかりじゃないけどね。
344デフォルトの名無しさん
垢版 |
2016/02/14(日) 02:52:58.16ID:SS1KUmSL
最近obj-cがまた順位上げてるみたい
やっぱりobj-c3.0待ちだよな
2016/02/14(日) 08:11:15.49ID:HUICKMOI
>>344
当然でしょ
Swiftに移行する必要性がないから
Appleのゴリ押しだけが推進力だからな
2016/02/14(日) 16:21:32.42ID:D0Yqf9Kh
>順位
Swiftを試した人の中の一定数がObjCへ出戻って来た影響じゃないか
2016/02/15(月) 12:04:03.75ID:o1yeVmO9
老害だな
根絶やしにしろ
2016/02/15(月) 21:23:46.60ID:D1MmfeIO
Objective-C使い=老害という思い込み
2016/02/16(火) 04:14:06.30ID:cX0cXTkh
Objective-Cはなんつーか"ちょうどいい"ポジションにいるので
ここからユーザーに移行を促すのは大変だよなぁ…
ほぼApple専用でなかったら、これいまのJavaの位置だったろ?ってぐらい
わかりやすいC+オブジェクト指向っぷりだし。
2016/02/16(火) 07:44:17.75ID:T8OiCwB/
>>349
>ほぼApple専用でなかったら、これいまのJavaの位置だったろ?ってぐらい
>わかりやすいC+オブジェクト指向っぷりだし
わかりやすいよね
351デフォルトの名無しさん
垢版 |
2016/02/16(火) 08:11:08.67ID:5UqE7wWz
こんないい言語がApple専用なのは本当に惜しい
2016/02/16(火) 09:16:19.80ID:2VnsGNUc
専用では無いんじゃないの? 
ランタイムはオープンだよね。
2016/02/16(火) 09:31:07.69ID:cb7bLrdU
ランタイムはどうか知らんがコンパイラはGNUが昔作った気がする
WinはおろかLinuxですら使う人口が少なかっただけで
2016/02/16(火) 09:32:29.42ID:AUXqcpoN
CoreFoundationやNS系がApple専用だしなあ
AppleのソフトにはWindows用にもそういったdllが入ってたりするから移植されてるんだろうけど、SDKとしては公開されてないし
NSのつかない純Objective-Cなライブラリ体系もあるにはあるしオープンだけど、実用上は全く嬉しくないだろ
2016/02/16(火) 10:47:44.05ID:L1d/icCk
smalltalkがもうちょっと一般的だったらObjective-Cも入りやすかったかもね
2016/02/16(火) 17:16:47.78ID:cb7bLrdU
スクイークが変態環境じゃなかったら良かったな
2016/02/16(火) 18:20:06.54ID:tCTD475N
>>354
昔のGNUにはNSがなかったけど、後で付け足した
2016/02/16(火) 18:40:44.24ID:PkVX6tWn
swiftで実装したFoundation開発中だけどgithubにリポジトリ置いているってことは
次のFoundationは最初からクロスプラットフォームでオープンってことかね
359デフォルトの名無しさん
垢版 |
2016/02/16(火) 20:29:36.88ID:uEcJx/Is
>>358
NSData.swiftのコードなんか眺めてると、OSがLinuxの場合のimportの記述もあったりするんで
クロスプラットフォームのことも想定はしている感じだな。
360デフォルトの名無しさん
垢版 |
2016/02/17(水) 10:38:58.04ID:NWAA8GlY
iOS8切れないプロジェクトはobjCしかない。
そのうち3.0出るでしょ。
2016/02/17(水) 14:48:04.74ID:4kmV8BWa
>>360
iOS7も切れないのに8と9の機能使いたいとか言うともうソースコードが大変 orz
2016/02/17(水) 16:57:00.36ID:243ZLeyW
Foundationのみでどこまでの事が出来るだろう。通信系とデータベース系のフレームワークもマルチプラットフォームで用意してくれればありがたい。
2016/02/17(水) 22:23:22.16ID:HWKatSeL
明確な必要性がないのに言語を変えようとしたら、そりゃ歪みは生じるわな
364デフォルトの名無しさん
垢版 |
2016/02/18(木) 22:02:44.40ID:ThW4WIO9
メッセージ式好き
メッセージ式に返り値使うの嫌い
[[obj alloc] init]ですら嫌い
365デフォルトの名無しさん
垢版 |
2016/02/18(木) 22:19:30.54ID:ncbtGfJT
[obj new];
366デフォルトの名無しさん
垢版 |
2016/02/18(木) 22:46:51.93ID:ThW4WIO9
>>365
newは好き
ほんと好き
367デフォルトの名無しさん
垢版 |
2016/02/19(金) 00:56:12.38ID:u0wtznhk
Objective-Cで使える公開鍵暗号方式のライブラリないですか?
RSAが使えてBSDライセンスのものを教えてください。
2016/02/19(金) 11:41:19.39ID:0R2jEsLy
>>367
普通のCのライブラリでもいいじゃんよー
2016/02/19(金) 14:00:51.88ID:hw/X0Y/j
>>367
っ OpenSSL

最近は Nettle が熱い
2016/02/19(金) 14:41:54.17ID:4FbEbwSw
開発元はGNUか...寒いな > nettle
一昔前ならGNUなら信頼出来ると思ってたけど、最近のOSS財団はメンテが滞ること多数
2016/02/19(金) 17:32:58.13ID:hw/X0Y/j
最近っつっても20年くらい前からだろ
2016/02/19(金) 18:03:02.88ID:v1bX/syV
ここ5年(盛って10年)くらいじゃない?
金がないからメンテ出来ませんってOSSが増えたの
20年も遡ったら興味ある人がいなくてメンテ出来ませんって感じだった気がする

AppleがObj-CでSSL実装作らねーかな
openSSLはバグ指摘多くてイヤになったろ
373デフォルトの名無しさん
垢版 |
2016/02/19(金) 21:23:00.58ID:dtTvn/Wc
https://osdn.jp/magazine/14/04/23/150000
2016/02/20(土) 05:51:57.06ID:KGb8ZGMM
> RSAが使えてBSDライセンス
何に使うつもりなんだろう
375デフォルトの名無しさん
垢版 |
2016/02/23(火) 06:47:28.40ID:Ic+Y0zem
objective-c#まだかな・・
2016/02/23(火) 08:57:37.54ID:EdYfjdOn
いやC#はちょっと。。C++よりはマシかもしれんが
377デフォルトの名無しさん
垢版 |
2016/02/26(金) 09:04:15.07ID:fCSgBQdM
swiftからoptional型やmapを省いた
swift--
だろ
2016/02/26(金) 10:23:32.68ID:AEppvgmX
素直にObjective-C without Cの言葉通り、静的型付きSmalltalkが出てればな
2016/02/26(金) 10:46:13.53ID:EcLgMPIl
Smalltalk++
Smalltalk#
2016/02/26(金) 11:09:00.81ID:B7GtwkvN
Smalltalk.NET
381デフォルトの名無しさん
垢版 |
2016/02/27(土) 07:43:20.45ID:zwwRZ2hM
記述中のこの安心感はすごい。
2016/02/29(月) 11:46:19.31ID:+6pgi266
NSObject

Zukei

Sankaku

継承していった場合、Zukeiっていらないですよね?
Zukeiって何に使うの?
383デフォルトの名無しさん
垢版 |
2016/02/29(月) 11:58:49.67ID:rONM9FLT
>>382
そんなの設計者によるとしか。
2016/02/29(月) 21:32:03.37ID:g6U0QDaU
Shikakuを定義するときじゃ無いかな
2016/02/29(月) 22:33:15.39ID:AGSlA4Px
>>382
Zukeiで実装されてる機能もいらないまたは一から作るならいらないね
2016/03/01(火) 10:05:50.59ID:Y4Aw5jZp
勇者と僧侶がいて、2人とも勇者だったら困るだろ?
2016/03/01(火) 19:28:43.56ID:oKiiXTzA
NSColorが持ってるCGColorプロパティっていつのまにINNER_POINTERになったんだ。
これインナーポインターってことは、NSColorが自動的にリリースしてくれるってことでいいのかな。
2016/03/02(水) 07:36:13.29ID:vYYDvy9N
>>378
それがSwiftだろw。Smalltalk/Xみたいに
Smalltalk部分とCの関係を逆転させればよかったのにな。
2016/03/02(水) 11:33:42.75ID:6RTODWst
initWith と 変数宣言って何が違うの?
2016/03/03(木) 07:33:32.75ID:v0X4WZo1
変数宣言は単に箱用意するだけじゃないの
2016/03/03(木) 11:22:52.73ID:sxVc5uct
initWithは?
2016/03/03(木) 11:34:11.40ID:LQKVhEqg
インスタンスメソッドだ。
2016/03/03(木) 13:58:32.20ID:jykHRqX5
// Swift
let s = self.window!.rootViewController as! UISplitViewController
let n = s.viewControllers[s.viewControllers.count-1] as! UINavigationController
n.topViewController!.navigationItem.leftBarButtonItem = s.displayModeButtonItem()


// Objective-C
id s = self.window.rootViewController;
id n = [s viewControllers][[s viewControllers].count-1];
[n topViewController].navigationItem.leftBarButtonItem = s.displayModeButtonItem;
2016/03/03(木) 15:01:47.17ID:LQKVhEqg
s, nはid型だから、メソッド呼ぼうにもXcodeに注意されるぞ。
2016/03/03(木) 17:29:19.39ID:NI2A9sOU
>>389
C言語の文法レベルで変数を宣言してるか
フレームワークレベルでクラスに命令して作らせてるかじゃね?

銀行に借金頼みに行くのと
かーちゃんに「金貸して」では
前者が厳格で融通が利かないけど細かい問題が少ないのに対して
後者が融通が利いて楽だけど相互の了解で成り立ってる的な。
2016/03/04(金) 07:50:35.47ID:A7nrOp7k
>>393
そのObjective-Cの2行目のメッセージ式が連続してるのって
どういう意味?
そんな書き方許されるんだっけ
(メッセージ式のネストのこと言ってるんじゃないからね)
2016/03/04(金) 12:15:52.50ID:ws81OHPW
>>396
配列の添え字アクセス。
int index = [s viewControllers].count-1;
id n = [s viewControllers][index];
2016/03/04(金) 12:39:05.31ID:JDwO95i7
UISplitViewController *s = …
UINavigationController *n = …

こう宣言しないとだめだよ。
2016/03/05(土) 00:53:47.62ID:Y+yze1Qk
>>397
いやだとしてもおかしいでしょ
配列の添字をメッセージ式の戻り値にするならかならずブラケットが二重になるはず
2016/03/05(土) 01:23:19.93ID:y3HtH6T+
>>399
???
2016/03/05(土) 01:32:10.69ID:Y+yze1Qk
>>400
えっ?もしかして[s viewControllers]の戻り値が配列だとして、
[s viewControllers]を配列名として記述できるってこと?
2016/03/05(土) 01:34:19.82ID:Y+yze1Qk
だとすると、例えばC言語でも、
hoge()の戻り値が配列(ポインタ)だとして、
hoge()[index]とかやったら添え字アクセスできちゃうわけ?
今手元に環境がないから試せないんだけど
2016/03/05(土) 01:35:06.51ID:Y+yze1Qk
やるとしたら
(hoge())[index]
か?
できたとしてもこんな変態的な表現見たことない…
2016/03/05(土) 01:35:30.03ID:5URH9rpB
>>401
[s viewControllers] は NSArray*返すんだからあってるじゃん
2016/03/05(土) 01:36:18.69ID:zjxr8oeE
UISplitViewController *s = (UISplitViewController *)(self.window.rootViewController);
UINavigationController *n = (UINavigationController *)(s.viewControllers[s.viewControllers.count - 1]);
n.topViewController.navigationItem.leftBarButtonItem = s.displayModeButtonItem;

こうだな
2016/03/05(土) 01:38:21.94ID:5URH9rpB
NSArray* array=[s viewControllers];
って時に
array[index] は [array objectAtIndex:index]になるんよ
コンパイラの方で補間してくれてる。
同じように
NSDictionary* dic;にたいして
dic[@"key"] は [dic objectForKey:@"key"]って読み替えしてくれるよ
2016/03/05(土) 01:40:23.17ID:zjxr8oeE
UISplitViewController *s = (UISplitViewController *)([[self window] rootViewController]);
UINavigationController *n = (UINavigationController *)([[s viewControllers] objectAtIndex:[[s viewControllers] count] - 1]);
[[[n topViewController] navigationItem] setLeftBarButtonItem:[s displayModeButtonItem]];

古い書き方したらこうか
2016/03/05(土) 01:41:05.38ID:Y+yze1Qk
>>406
うん、そこまではわかる
メッセージ式の引数をダイレクトに配列変数名として[]による要素アクセス
しちゃうなんていうアクロバティックな表現見たことなくてさ
2016/03/05(土) 01:43:00.37ID:Y+yze1Qk
まあ、わかるとは言ったけど、>>406も驚きだわ
今のコンパイラはそのレベルまで補完してくれるんだね…
バグの原因になりそうだけど
2016/03/05(土) 01:46:11.56ID:zjxr8oeE
ていうかこのサンプルコード?
self.windowってことは、UIViewのサブクラスの中から
UINavigationControllerのleftBarButtonItem変更してるんか
かなり糞コードな気が
2016/03/05(土) 01:50:46.16ID:Y+yze1Qk
>>393
つーか、メッセージ式の戻り値でダイレクトに後置[]で要素アクセスしちゃうのもアレだけど、
Objective-Cにおいてオブジェクトのメンバーをドットで直接参照するなんてのも
書き方としてあり得るの?
2016/03/05(土) 01:52:24.95ID:Y+yze1Qk
しかも、仮に強いて直接参照するとしても演算子は->じゃない?
謎が多すぎる
2016/03/05(土) 01:56:08.96ID:zjxr8oeE
ドットはメンバーにアクセスしてるんじゃなくてプロパティのシンタックスシュガー
配列辞書の[]は最近だけどドット記法はだいぶ前からある


[o hoge] は o.hoge
[o setHoge:h] は o.hoge = h
と書ける

->とは全然別物
2016/03/05(土) 02:05:55.05ID:Y+yze1Qk
>>413
マジか…
Objective-Cらしからぬ表現が今のコンパイラでは可能なのね
ちょっと衝撃だわ
Cocoaプログラミングしばらくやってなかったツケが回ってきてるわw
2016/03/05(土) 02:13:33.21ID:Y+yze1Qk
思い出してきたが、@propertyってちょうどやらなくなったくらいで出てきた気がする
だいぶ昔だよね確かにorz
2016/03/05(土) 02:28:25.53ID:Y+yze1Qk
やっぱAppleがObjective-Cを収束する方針なのは残念だわ
(Swiftが軌道に乗るのかは微妙だけど)

世界初のWebブラウザもObjective-Cで書かれたんだよね
https://www.w3.org/History/1991-WWW-NeXT/Implementation/
2016/03/05(土) 02:30:28.15ID:jb1F0oyu
それはかなり前からやってないことにならないか?
今はジェネリクスとかNonNullableとかあるで。
2016/03/05(土) 02:33:47.98ID:y3HtH6T+
かなり古いところで知識が止まってる人やったんやな。
2016/03/05(土) 02:47:18.67ID:Y+yze1Qk
>>417
やばい、またCocoaプログラミングやりたくなって来た
今からまたObjective-C勉強しなおしても無駄にはならないかな

>>418
はい、勉強します。。。
2016/03/05(土) 02:54:21.39ID:5URH9rpB
>>419
つか今時のObjective-cめちゃ楽しいよ
swiftの方が記述がキモイ(あそこまでやるならML系まっしぐらにして欲しい)ので俺はイヤだわ
2016/03/05(土) 02:54:51.89ID:y3HtH6T+
>>5
> Objective-C Literals ― Clang 3.9 documentation
> http://clang.llvm.org/docs/ObjectiveCLiterals.html

今の Obj-C はいろいろなリテラルが導入されてるんやで。
2016/03/05(土) 03:00:27.20ID:Y+yze1Qk
>>420
>>421
真夜中なのに久々にワクワクしてきたw
いろいろ漁ってたら前に買った詳解Objective-C2.0が出てきた
2008年6月1日初版第1刷って書いてある。。
でもまずは基礎をちゃんとやり直さないと今時のObjective-Cも楽しめないよね
がんばろ
ありがとう!
2016/03/05(土) 03:29:49.20ID:Y+yze1Qk
>>421
NSNumberのリテラルはさすがに最近の話ですよね
自分の無知を痛感してきた
これって内部実装はマクロ的に組まれてて数値の範囲はLongLongやDoubleまで
あらゆる数値が可能なのかな
それともコンパイラがやってくれてるんですかね
2016/03/05(土) 03:49:29.29ID:y3HtH6T+
NSNumber リテラルは2012年の Clang 3.1 からあるで。
2016/03/05(土) 04:09:14.03ID:Y+yze1Qk
そうですか…
もはやブランクというレベルじゃない気がしてきましたね
ノリノリでやってた時って、まだProject BuilderとInterface Builderの時代だったし…
でもやっぱり楽しいですねObjective-Cって
2016/03/05(土) 08:30:43.19ID:xdiHToCv
(おれ、1990年代頭にK&RでC学んだから、ずっとポインタは整数型だと思ってて
いつのまにかポインタ型ってのになってるの2010年ごろまで知らんかったでw)
2016/03/05(土) 09:33:32.85ID:C6PXQEiT
Objective-Cはここ数年で劇的に変わったからな。
といかお前ら絶対Objective-C 2.0とか知らないだろ。

2010年:Objective-C 最速基礎文法マスター
http://d.hatena.ne.jp/fn7/20100203/1265207098
2015年:Objective-C 2.0 基礎文法最速マスター
http://marycore.jp/prog/objective-c/basic-syntax/
2016/03/05(土) 09:40:03.49ID:y3HtH6T+
Obj-C 2.0 なんて 9 年前の言葉持ち出してきてどうした
2016/03/05(土) 09:57:04.10ID:C6PXQEiT
たしかにObjective-C 2.0以前にXcode側の対応が充実したって言ったほうがいいかもな。
あとマイナーアップデートもちょくちょくあった気がする。
@implementation側でインスタンス変数宣言出来るようになったし
ジェネリックスも最近入ってきた。
2016/03/05(土) 10:02:21.11ID:xdiHToCv
>>427
上でも出てるが詳解Objective-C2.0(萩原本)は2008年やで。
俺もcocoaやろうと買ってて、それを2009年のiPhone開発解禁で
本格的に読み始めたから、基本的にiOSやってるやつはみんな2.0からやで。
2016/03/05(土) 11:55:02.65ID:UYtB00OI
Objective-Cじゃダメな理由って何なのそれ?
2016/03/05(土) 12:29:52.33ID:jb1F0oyu
>>416
あと2.0?になってからpublicとかprivateキーワードも使わなくなったよね。

ヘッダファイル記載したプロパティはpublic
.m側にカテゴリとして記載したプロパティがprivateみたいな方針が標準になった

syhthsizeとかも直接使わなくなってプロバティを宣言すると裏で勝手に
_変数 がつくられてsetterとgetterが自動生成されるとか
暗黙的なことがごちゃごちゃ増えたね。
後から入った人にはマジカルすぎるかもしれない
2016/03/05(土) 13:18:46.27ID:Y+yze1Qk
少しずつ読み進めてますが、Objective-Cらしくない感じがしちゃうけど@propertyは便利ですね

ただ、
@public
@private
@protected
はわかりやすかった気がするけど、ヘッダファイルにprivateメンバの情報を
載せないで済むようにしたかったってことなのかな
2016/03/05(土) 14:18:12.35ID:mFk1f1pP
ヘッダに書くのはパブリックメソッドのみ。これが合理的で非常にわかりやすい。
もっともOOPに適した言語だと思う。
2016/03/05(土) 14:35:34.86ID:HF+l0CAH
ここはいつから日記帳になったんだ
2016/03/05(土) 18:16:16.08ID:jb1F0oyu
>>435
確かにヘッダ見ればそのライブラリのオープンなメソッドしか見えない
というのはわかりやすい。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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