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
探検
Objective-C [ObjC part:8.1]; [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
2014/11/01(土) 13:35:17.70ID:12FSUUrY
488デフォルトの名無しさん
2016/10/07(金) 01:38:54.58ID:UYUTVtAf iOSだと大量のリファレンスそれも日本語の(英語でも一応なんとかなりますけど・・・
があるのにOSXのほうはなかなか見つけるのが難しくて苦労してます(探し方わるいのかもしれんけど)
があるのにOSXのほうはなかなか見つけるのが難しくて苦労してます(探し方わるいのかもしれんけど)
489デフォルトの名無しさん
2016/10/12(水) 21:41:24.49ID:fMOTdRji クラスを配列で作りたいんだけどこれって大丈夫?
@interface myclass : NSObject{
int kazu;
}
-(void)set : (int) i;
-(void)print;
@end
@implementation myclass
-(void)set : (int) i
{
self->kazu = i;
}
-(void)print
{
printf(”%d\n”, kazu);
}
@end
int main()
{
@autoreleasepool
{
myclass* obj[3];
for(int i=0; i<3; ++i)
obj[i] = [ [myclass alloc]init ];
for(int i=0; i<3; ++i)
[obj[i]set : i*10];
for(int i=0; i<3; ++i)
[obj[i]print];
}
return 0;
}
@interface myclass : NSObject{
int kazu;
}
-(void)set : (int) i;
-(void)print;
@end
@implementation myclass
-(void)set : (int) i
{
self->kazu = i;
}
-(void)print
{
printf(”%d\n”, kazu);
}
@end
int main()
{
@autoreleasepool
{
myclass* obj[3];
for(int i=0; i<3; ++i)
obj[i] = [ [myclass alloc]init ];
for(int i=0; i<3; ++i)
[obj[i]set : i*10];
for(int i=0; i<3; ++i)
[obj[i]print];
}
return 0;
}
490デフォルトの名無しさん
2016/10/12(水) 23:42:00.99ID:GIO3EA35 構造体と配列はARCが効かないからメモリーリークするんじゃなかったっけ?
autoreleasepool抜けた後
-(void) dealloc {} ちゃんと呼ばれる?
autoreleasepool抜けた後
-(void) dealloc {} ちゃんと呼ばれる?
491デフォルトの名無しさん
2016/10/13(木) 00:28:51.23ID:d0+eFHBu492デフォルトの名無しさん
2016/10/13(木) 00:34:33.56ID:d0+eFHBu 間違えた
[obj[i] dealloc];ってことになるのか?
[obj[i] dealloc];ってことになるのか?
493デフォルトの名無しさん
2016/10/13(木) 00:41:30.99ID:5gkYrLUa いや、やるとしても
[obj[i] release];
でしょ
メモリー管理のポリシー的にdeallocメソッドは滅多なことでは使わない
[obj[i] release];
でしょ
メモリー管理のポリシー的にdeallocメソッドは滅多なことでは使わない
494デフォルトの名無しさん
2016/10/13(木) 00:45:19.72ID:d0+eFHBu 了解、あんまこういうの載ってるとこなくて質問させてもらいました
ありがと
ありがと
495デフォルトの名無しさん
2016/10/13(木) 00:47:40.63ID:d0+eFHBu ってかこういう処理ってobj-cで普通どうやるの?
C++だったらvectorにぶち込むとか
javaだったらガンガンnewしちゃうけど・・・
C++だったらvectorにぶち込むとか
javaだったらガンガンnewしちゃうけど・・・
496デフォルトの名無しさん
2016/10/13(木) 00:54:16.14ID:d0+eFHBu (別にvectorにぶち込まなくても普通に配列で作れたわ 恥ずかしい・・・)
497デフォルトの名無しさん
2016/10/13(木) 01:30:12.49ID:TfTkEqcE >>489
大丈夫。
myclass* obj[3]; //ポインタ型の配列 省略されてるがstrong
ARC有効なのでmainのスコープを抜けた時に解放される。
@autoreleasepoolは要らない。
大丈夫。
myclass* obj[3]; //ポインタ型の配列 省略されてるがstrong
ARC有効なのでmainのスコープを抜けた時に解放される。
@autoreleasepoolは要らない。
498デフォルトの名無しさん
2016/10/13(木) 01:33:33.88ID:TfTkEqcE ARCだからreleaseは呼べないので、解放されるかチェックするなら
@implementation myclass
- (void)dealloc
{
NSLog(@“%s”, __func__);
}
@end
@implementation myclass
- (void)dealloc
{
NSLog(@“%s”, __func__);
}
@end
499デフォルトの名無しさん
2016/10/13(木) 01:55:06.63ID:d0+eFHBu500デフォルトの名無しさん
2016/10/13(木) 01:59:27.13ID:d0+eFHBu あと、ARCなしだったら
-(void)deallocに[super dealloc];必要だよね
-(void)deallocに[super dealloc];必要だよね
501デフォルトの名無しさん
2016/10/13(木) 02:02:15.85ID:d0+eFHBu >499
ごめん変なこと書いた
objective-c始めたばっかだからおかしなこと書いてスマソ
ってことはARC効かなかったら手動でreleaseしないといけないってことだよね
[obj[i] release];
ごめん変なこと書いた
objective-c始めたばっかだからおかしなこと書いてスマソ
ってことはARC効かなかったら手動でreleaseしないといけないってことだよね
[obj[i] release];
502デフォルトの名無しさん
2016/10/13(木) 02:11:12.99ID:TfTkEqcE >>495
これで動作確認してみたよ。(ARC)
-deallocも呼ばれる。
int main()
{
myclass* obj[3];
for(int i=0; i<3; ++i) {
obj[i] = [ [myclass alloc]init ];
[obj[i]set : i*10];
[obj[i]print];
}
return 0;
}
>>500
MRCなら[super dealloc]; を末尾で呼びます。
>>501
手動でretain, releaseなんだけど、init系はretain済みを返すとか、
コンビニエンスコンストラクタはautorelease済みを返すとか、
ViewにaddSubviewしたらretainされるとか、いろいろややこしいかもよw
あと、Xcodeのテンプレではmain()に@autoreleasepoolがあるけど、
ARCなら上記のとおり解放されるし、どのみちmainを抜けたらアプリ終了で解放されるんだよね。
これで動作確認してみたよ。(ARC)
-deallocも呼ばれる。
int main()
{
myclass* obj[3];
for(int i=0; i<3; ++i) {
obj[i] = [ [myclass alloc]init ];
[obj[i]set : i*10];
[obj[i]print];
}
return 0;
}
>>500
MRCなら[super dealloc]; を末尾で呼びます。
>>501
手動でretain, releaseなんだけど、init系はretain済みを返すとか、
コンビニエンスコンストラクタはautorelease済みを返すとか、
ViewにaddSubviewしたらretainされるとか、いろいろややこしいかもよw
あと、Xcodeのテンプレではmain()に@autoreleasepoolがあるけど、
ARCなら上記のとおり解放されるし、どのみちmainを抜けたらアプリ終了で解放されるんだよね。
503デフォルトの名無しさん
2016/10/13(木) 02:18:38.99ID:d0+eFHBu >>502
ほんとに助かります ありがと
ってか素直にxcode使いますw
OSXとiOS意外の環境にObjective-c流行らないのって
これ関係だよね(メモリの管理)
GNUstepも確か手動でしょ?メモリ解放
むしろなれてるcの方がメモリ管理楽に感じる(小声
ほんとに助かります ありがと
ってか素直にxcode使いますw
OSXとiOS意外の環境にObjective-c流行らないのって
これ関係だよね(メモリの管理)
GNUstepも確か手動でしょ?メモリ解放
むしろなれてるcの方がメモリ管理楽に感じる(小声
504デフォルトの名無しさん
2016/10/13(木) 02:32:47.05ID:TfTkEqcE505デフォルトの名無しさん
2016/10/14(金) 14:48:31.14ID:v9j5dzmv 教えてください。
詳解Objective-C2.0第3版を読んでいます。ランタイムシステムってのが出てくるんですけど、これはアプリ1つに一個起動されるのでしょうか?それとも、OSの起動毎に一個起動されるのでしょうか?
詳解Objective-C2.0第3版を読んでいます。ランタイムシステムってのが出てくるんですけど、これはアプリ1つに一個起動されるのでしょうか?それとも、OSの起動毎に一個起動されるのでしょうか?
506デフォルトの名無しさん
2016/10/14(金) 14:59:05.79ID:v9j5dzmv Objective-Cのランタイムってのは<objc/runtime.h>に定義されている、Cの関数郡って事らしい。木下本に記載があるらしい。たとえば、objc_setAssociatedObject() / objc_getAssociatedObject() ってのがあるって事だ。
507デフォルトの名無しさん
2016/10/14(金) 15:32:44.99ID:lawu0WKC >>505
これ読んでみて
Objective-Cランタイムシステムは、すべてのクラスオブジェクトに対してinitializeメッセージを送信します。
各クラスは、ほかのいずれのメッセージよりも先にこのメッセージを受け取ります。
その結果、クラスの使用に先立ってクラス独自のランタイム環境を準備できます。
https://developer.apple.com/jp/documentation/Multithreading.pdf
これ読んでみて
Objective-Cランタイムシステムは、すべてのクラスオブジェクトに対してinitializeメッセージを送信します。
各クラスは、ほかのいずれのメッセージよりも先にこのメッセージを受け取ります。
その結果、クラスの使用に先立ってクラス独自のランタイム環境を準備できます。
https://developer.apple.com/jp/documentation/Multithreading.pdf
508デフォルトの名無しさん
2016/10/14(金) 23:13:42.95ID:lawu0WKC >>505
まずアプリごとに別プロセスであって、その上でスレッドを実行している。
ランタイム自体はCの関数群なので、アプリがマルチスレッドの場合はスレッドごとにスタックを確保し実行される。
なので、ランタイムはアプリに1個ではなくスレッドに1個ということだね。
スレッドごとにプライオリティが違うのでランタイムの実行速度も違うわけだし。
あんまり詳しく無いけどこんな感じだと思います。
まずアプリごとに別プロセスであって、その上でスレッドを実行している。
ランタイム自体はCの関数群なので、アプリがマルチスレッドの場合はスレッドごとにスタックを確保し実行される。
なので、ランタイムはアプリに1個ではなくスレッドに1個ということだね。
スレッドごとにプライオリティが違うのでランタイムの実行速度も違うわけだし。
あんまり詳しく無いけどこんな感じだと思います。
509デフォルトの名無しさん
2016/10/15(土) 08:39:31.98ID:KMpEggfz510デフォルトの名無しさん
2016/10/15(土) 08:59:48.13ID:dlnFVU64 なんかおかしくないかと思ったが、質問者が納得したならいいか
511デフォルトの名無しさん
2016/10/15(土) 09:12:48.51ID:3zvDUrQk ランタイムって起動時にクラス登録したりメソッド登録したりして、
メソッド呼び出し時にメソッド解決するためのシステムやろ。
アプリに1つずつじゃないの。
メソッド呼び出し時にメソッド解決するためのシステムやろ。
アプリに1つずつじゃないの。
512508
2016/10/15(土) 09:29:45.08ID:dk6au9gQ スレッドに1個というのは、スレッド毎にスタックメモリを確保してるという意味で、
ただの関数なんだからそうなるよね。
ソースまだ読んで無いけどw
ただの関数なんだからそうなるよね。
ソースまだ読んで無いけどw
513デフォルトの名無しさん
2016/10/15(土) 10:10:00.08ID:dk6au9gQ 時間ある人読んでみて。違ったら教えてw
ダイナミックObjective-C
http://news.mynavi.jp/column/objc/014/
ソース
http://opensource.apple.com/source/objc4/objc4-267/runtime/
ダイナミックObjective-C
http://news.mynavi.jp/column/objc/014/
ソース
http://opensource.apple.com/source/objc4/objc4-267/runtime/
514デフォルトの名無しさん
2016/10/15(土) 10:11:59.38ID:KMpEggfz >>511
根拠やソースをどうぞ!
ランタイムって言葉は、乱用されてるので、誤解を招きやすいよねぇ。
Visual Basicランタイムてのは、実態はdll(osxでいうとdylib)で、具体的には
Msvbvm60.dll
vb6jp.dll
Stdole2.tlb
Oleaut32.dll
Olepro32.dll
Comcat.dll
Asycfilt.dll
Ctl3d32.dll
ですよねぇ。
同様に、Obj-Cのランタイムは、libobjc.A.dylibってことですね。
Objective-C Runtime Reference - Developer - Apple
Objective-C runtime library support functions are implemented in the shared library found at /usr/lib/libobjc.A.dylib.
根拠やソースをどうぞ!
ランタイムって言葉は、乱用されてるので、誤解を招きやすいよねぇ。
Visual Basicランタイムてのは、実態はdll(osxでいうとdylib)で、具体的には
Msvbvm60.dll
vb6jp.dll
Stdole2.tlb
Oleaut32.dll
Olepro32.dll
Comcat.dll
Asycfilt.dll
Ctl3d32.dll
ですよねぇ。
同様に、Obj-Cのランタイムは、libobjc.A.dylibってことですね。
Objective-C Runtime Reference - Developer - Apple
Objective-C runtime library support functions are implemented in the shared library found at /usr/lib/libobjc.A.dylib.
515デフォルトの名無しさん
2016/10/15(土) 10:17:34.69ID:KMpEggfz >>511
この人は多分こんな誤解をしている。
ランタイムシステムっていうプロセスがアプリが起動される度にfork(生成されて)されて、「xxxやyyyって仕事をしている」
だから、アプリが複数起動されると、メモリはランタイムシステムで溢れかえる。
androidでは、アプリが起動される度にVMがforkされる様に。
この人は多分こんな誤解をしている。
ランタイムシステムっていうプロセスがアプリが起動される度にfork(生成されて)されて、「xxxやyyyって仕事をしている」
だから、アプリが複数起動されると、メモリはランタイムシステムで溢れかえる。
androidでは、アプリが起動される度にVMがforkされる様に。
516デフォルトの名無しさん
2016/10/15(土) 10:26:13.78ID:KMpEggfz こんな理解で、ええんでっしゃろか?
libobjc.A.dylib ― obj-c runtime
libobjc.B.dylib ― core foundation
libobjc.A.dylib ― obj-c runtime
libobjc.B.dylib ― core foundation
517デフォルトの名無しさん
2016/10/15(土) 10:32:53.00ID:3zvDUrQk なんでプロセスの話になってんの。お前が何を言ってるのかまるで分からない。
518デフォルトの名無しさん
2016/10/15(土) 11:01:56.05ID:fVu0gjAI obj-c runtimeは、dylibとして実装されている。通常、OS起動時に仮装メモリ上にロードされるので、アプリ起動時に新たにロードされることはない。
Cocoa/Foundationにリンクしてコンパイルされたバイナリがメモリ上にロードされると、仮装メモリ上のdylibイメージがプロセスのメモリ空間にマップされ、objc runtimeとして利用出来るようになる。
ランタイムの初期化はプロセス毎だが、独立したプロセスとして実装されている訳ではない。
Cocoa/Foundationにリンクしてコンパイルされたバイナリがメモリ上にロードされると、仮装メモリ上のdylibイメージがプロセスのメモリ空間にマップされ、objc runtimeとして利用出来るようになる。
ランタイムの初期化はプロセス毎だが、独立したプロセスとして実装されている訳ではない。
519デフォルトの名無しさん
2016/10/15(土) 11:28:07.92ID:KMpEggfz >>518
なんがと!
メモリへのマップはshmat(shared memory attatch)で行われるって理解でOK?
man shmat
BSD System Calls Manual SHMAT(2)
DESCRIPTION
shmat() maps the shared memory segment associated with the shared memory
identifier shmid into the address space of the calling process.
なんがと!
メモリへのマップはshmat(shared memory attatch)で行われるって理解でOK?
man shmat
BSD System Calls Manual SHMAT(2)
DESCRIPTION
shmat() maps the shared memory segment associated with the shared memory
identifier shmid into the address space of the calling process.
520デフォルトの名無しさん
2016/10/15(土) 14:20:50.64ID:5BWmrAPA それはプロセス間共有メモリで別物かと。
キチンと調べるならMACH-O binaryとかかな?
http://www.m4b.io/reverse/engineering/mach/binaries/2015/03/29/mach-binaries.html
記憶ではApple のmach-O file format referenceとかあったはずだが検索で見つからない。
キチンと調べるならMACH-O binaryとかかな?
http://www.m4b.io/reverse/engineering/mach/binaries/2015/03/29/mach-binaries.html
記憶ではApple のmach-O file format referenceとかあったはずだが検索で見つからない。
521デフォルトの名無しさん
2016/10/16(日) 10:35:31.41ID:FpSgdyT6 基本的にクラス(インスタンス)のプロセスを動的に管理するOSのようなものが
Objective-Cのアプリが動作している間中必要なので
ずっとそこに基本管理プログラムとして居続けてるかと。
(アプリが動作してない時もアプリが起動した途端にいるから常駐してる)
Objective-Cのアプリが動作している間中必要なので
ずっとそこに基本管理プログラムとして居続けてるかと。
(アプリが動作してない時もアプリが起動した途端にいるから常駐してる)
522デフォルトの名無しさん
2016/10/16(日) 11:28:22.44ID:xF5nqLB3 >>521
意味不明!
クラス(インスタンス)のプロセスってなに?
プロセスを動的に管理するOSのようなものって?
ずっとそこに基本管理プログラムとして居続けてるかと?
一体何が、いると思ってるんだ?
意味不明!
クラス(インスタンス)のプロセスってなに?
プロセスを動的に管理するOSのようなものって?
ずっとそこに基本管理プログラムとして居続けてるかと?
一体何が、いると思ってるんだ?
523デフォルトの名無しさん
2016/10/16(日) 11:50:42.07ID:3UpkNFG/ 普通、コンパイル言語のランタイムというとその言語の機能を実現するための低レベルのライブラリの事。
これらのライブラリを呼ぶコードはコンパイラが生成するが、ユーザーが明示的にこれらを呼ぶ事はない。
また、ユーザーのプログラムのmainに飛ぶ前にこのランタイム環境は初期化され、普通は単に
アプリケーションプロセスの一部でしかない。
例えばObjective-Cのランタイムにはダイナミックなメッセージングを実現するためのAPIが含まれる。
Objective-C Runtime
https://developer.apple.com/reference/objectivec/1657527-objective_c_runtime
これらのライブラリを呼ぶコードはコンパイラが生成するが、ユーザーが明示的にこれらを呼ぶ事はない。
また、ユーザーのプログラムのmainに飛ぶ前にこのランタイム環境は初期化され、普通は単に
アプリケーションプロセスの一部でしかない。
例えばObjective-Cのランタイムにはダイナミックなメッセージングを実現するためのAPIが含まれる。
Objective-C Runtime
https://developer.apple.com/reference/objectivec/1657527-objective_c_runtime
524デフォルトの名無しさん
2016/10/16(日) 13:08:49.80ID:vrM29RHh PCあぷり屋さんって、どのようにしてアプリがCPUで実行されてるのか知らない人多いよねたぶん
525デフォルトの名無しさん
2016/10/16(日) 16:25:18.60ID:xF5nqLB3 >>524
では、どの様にして、知る事になりました?
何か良い教科書あります?
俺が良かったのは、パタヘネ、最初の数章でもすげー役立つ。
それから、オブジェクト指向でなぜつくるのか。
良書があれば、紹介よろしくお願いします。
では、どの様にして、知る事になりました?
何か良い教科書あります?
俺が良かったのは、パタヘネ、最初の数章でもすげー役立つ。
それから、オブジェクト指向でなぜつくるのか。
良書があれば、紹介よろしくお願いします。
526デフォルトの名無しさん
2016/10/16(日) 18:02:27.53ID:LrWAw6Fi このランタイム質問者、ちょっと頭変だな。
527デフォルトの名無しさん
2016/10/16(日) 18:43:10.86ID:ffIkMhfP >>522
いったい何が?もなにも、Objective-Cは[[class alloc] init]の形で動的にメッセージを受け取ってインスタンスを生成するので
クラスにメッセージを受け渡してメモリ配置などを管理する"誰か"がいないと動かないが。
たぶん根本的に君が"動的"の概念を理解していないか、"ちょっと頭変"なのかどちらか。
いったい何が?もなにも、Objective-Cは[[class alloc] init]の形で動的にメッセージを受け取ってインスタンスを生成するので
クラスにメッセージを受け渡してメモリ配置などを管理する"誰か"がいないと動かないが。
たぶん根本的に君が"動的"の概念を理解していないか、"ちょっと頭変"なのかどちらか。
528デフォルトの名無しさん
2016/10/16(日) 21:29:21.51ID:TQzOcNUQ みんな少しずつおかしいなw
ランタイムは常駐はしてないし、別プロセスや別スレッドで動くようなもんでもないし、dylibの形をしているとは限らないぞ
ただ暗黙に呼び出されてるだけで単なる関数群の事だよ
ランタイムは常駐はしてないし、別プロセスや別スレッドで動くようなもんでもないし、dylibの形をしているとは限らないぞ
ただ暗黙に呼び出されてるだけで単なる関数群の事だよ
529デフォルトの名無しさん
2016/10/16(日) 21:41:55.63ID:3UpkNFG/ >>527
objective-c のメッセージングは最終的には関数呼び出しでしかない。
class_getInstanceMethodでクラスとセレクタ名からメソッドを得て
それを呼び出すだけ。
「メッセージを受け取る」というのは言語の概念的なイメージであって
実装とは乖離している。
objective-c のメッセージングは最終的には関数呼び出しでしかない。
class_getInstanceMethodでクラスとセレクタ名からメソッドを得て
それを呼び出すだけ。
「メッセージを受け取る」というのは言語の概念的なイメージであって
実装とは乖離している。
530デフォルトの名無しさん
2016/10/17(月) 05:56:51.62ID:ur/Bh7VH frameworkのサポートは単なるラッパで実態はdylibだとずっと思ってたんだけど...実装違うのか?だとしたらごめん。
531デフォルトの名無しさん
2016/10/17(月) 06:14:09.00ID:yAttM8H1 いやframeworkは確かにdylibとヘッダその他をまとめたもんだけと
今話している「言語」ランタイムはframeworkのことじゃないから
frameworkのことを、例えばQuickTimeランタイムみたいに呼ぶこともあるからややこしいけど
今話している「言語」ランタイムはframeworkのことじゃないから
frameworkのことを、例えばQuickTimeランタイムみたいに呼ぶこともあるからややこしいけど
532デフォルトの名無しさん
2016/10/17(月) 09:31:44.72ID:v6qceZ1M >>529
うん!素晴らしい説明ありがとう。
うん!素晴らしい説明ありがとう。
533デフォルトの名無しさん
2016/10/17(月) 10:00:29.08ID:v6qceZ1M534デフォルトの名無しさん
2016/10/17(月) 10:16:02.28ID:v6qceZ1M >>530
ほぼ合ってるでしょ!
frameworkの実態は複数のdylib。というよりdylibそのもの。
単なるwrapperってのは、違うかな。
dylibはobjective-cのクラスやグローバル関数などなどをアーカイブたライブラリー。このobjective-cのライブラリーは、core foundationやrun timeと呼ばれるC言語関数群のwrapperとなっている。
core foundationやrun timeは
>>516
>libobjc.A.dylib ― obj-c runtime
>libobjc.B.dylib ― core foundation
に入っている。
hello worldプログラムをコンパイルしてa.outを作成し、otool -L a.outコマンドを打ってみると判る。
a.out:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
と思ったけど、libobjc.B.dylibなんで出てこず、libSystem.B.dylibって表示された?
ほぼ合ってるでしょ!
frameworkの実態は複数のdylib。というよりdylibそのもの。
単なるwrapperってのは、違うかな。
dylibはobjective-cのクラスやグローバル関数などなどをアーカイブたライブラリー。このobjective-cのライブラリーは、core foundationやrun timeと呼ばれるC言語関数群のwrapperとなっている。
core foundationやrun timeは
>>516
>libobjc.A.dylib ― obj-c runtime
>libobjc.B.dylib ― core foundation
に入っている。
hello worldプログラムをコンパイルしてa.outを作成し、otool -L a.outコマンドを打ってみると判る。
a.out:
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1226.10.1)
と思ったけど、libobjc.B.dylibなんで出てこず、libSystem.B.dylibって表示された?
535デフォルトの名無しさん
2016/10/17(月) 10:18:49.39ID:v6qceZ1M Objective-C runtime library support functions are implemented in the shared library found at /usr/lib/libobjc.A.dylib.
https://developer.apple.com/reference/objectivec/1657527-objective_c_runtime
https://developer.apple.com/reference/objectivec/1657527-objective_c_runtime
536デフォルトの名無しさん
2016/10/17(月) 10:22:05.11ID:v6qceZ1M >>531
ランタイムは、ランタイムライブラリーを省略した文言で、ちゃんとdylibの形をしているんちゃうんか?
だって、AppleのサイトでObjective-C Runtimeって検索するとruntime libraryって書いてあるし。
ランタイムは、ランタイムライブラリーを省略した文言で、ちゃんとdylibの形をしているんちゃうんか?
だって、AppleのサイトでObjective-C Runtimeって検索するとruntime libraryって書いてあるし。
537デフォルトの名無しさん
2016/10/17(月) 10:34:16.48ID:vi4PRwIq >>534
> hello worldプログラムを
俺のには含まれてるぞ
$ otool -L a.out
a.out:
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1154.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1153.18.0)
ソースは単に
//hello.m
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSLog (@"Hello, World!");
return 0;
}
> hello worldプログラムを
俺のには含まれてるぞ
$ otool -L a.out
a.out:
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1154.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1213.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1153.18.0)
ソースは単に
//hello.m
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSLog (@"Hello, World!");
return 0;
}
538537
2016/10/17(月) 10:40:26.72ID:vi4PRwIq >>534
ひょっとして、.mファイルだけど中身はまったくCのhello worldをコンパイルしたんじゃないか?
objective-CはCはそのままコンパイルできる。 Objective-cの機能を使ってなければobjective-Cの
ランタイムをリンクしなくてもそのまま走る。
ひょっとして、.mファイルだけど中身はまったくCのhello worldをコンパイルしたんじゃないか?
objective-CはCはそのままコンパイルできる。 Objective-cの機能を使ってなければobjective-Cの
ランタイムをリンクしなくてもそのまま走る。
539537
2016/10/17(月) 10:54:39.51ID:vi4PRwIq >>537
ごめん、その例では悪かった。 それもobjective-Cの機能は使ってない。 使った例としては:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog (@"Hello, World!");
[pool drain];
return 0;
}
コマンドラインでobjcのコンパイルの仕方で
cc -lobjc …
という例を見たのでそれを付けてたら強制的にobjcランタイムをリンクしてた。
objc機能を使ってなければこれを明記しなくても自動的にリンクされる。
ごめん、その例では悪かった。 それもobjective-Cの機能は使ってない。 使った例としては:
#import <Foundation/Foundation.h>
int main (int argc, const char * argv[])
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog (@"Hello, World!");
[pool drain];
return 0;
}
コマンドラインでobjcのコンパイルの仕方で
cc -lobjc …
という例を見たのでそれを付けてたら強制的にobjcランタイムをリンクしてた。
objc機能を使ってなければこれを明記しなくても自動的にリンクされる。
540デフォルトの名無しさん
2016/10/17(月) 11:25:21.72ID:v6qceZ1M >>538
ご明答
ccなんてコマンドあるのね。
ls -l `which cc`
lrwxr-xr-x 1 root wheel 5B 6 13 13:50 /usr/bin/cc -> clang
clangへのaliasなのね。知らんかった。Obj-Cなんて極最近触り始めて
良く知らんのだ。
ご明答
ccなんてコマンドあるのね。
ls -l `which cc`
lrwxr-xr-x 1 root wheel 5B 6 13 13:50 /usr/bin/cc -> clang
clangへのaliasなのね。知らんかった。Obj-Cなんて極最近触り始めて
良く知らんのだ。
541デフォルトの名無しさん
2016/10/17(月) 11:37:03.04ID:4hpKEwJL ccそのものは昔からあるCのコンパイラでしょ、今はgccにリンクしてることが多いが
542デフォルトの名無しさん
2016/10/17(月) 11:59:05.64ID:v6qceZ1M 俺的メモ
gccとcc(clang)との違い。
ccはコマンドalias。
gccはclangのwrapperコマンド(俺の推測)
gcc -v, cc ―versionは、どちらもApple LLVMだと答えてくれる。
cc -framework Foundation hello.m
gcc -framework Foundation hello.m
と打ってコンパイルして得られるバイナリは同サイズだ。
ll a.out*
-rwxr-xr-x 1 ad staff 8.3K 10 17 11:54 a.out
-rwxr-xr-x 1 ad staff 8.3K 10 17 11:53 a.out-cc
gccとcc(clang)との違い。
ccはコマンドalias。
gccはclangのwrapperコマンド(俺の推測)
gcc -v, cc ―versionは、どちらもApple LLVMだと答えてくれる。
cc -framework Foundation hello.m
gcc -framework Foundation hello.m
と打ってコンパイルして得られるバイナリは同サイズだ。
ll a.out*
-rwxr-xr-x 1 ad staff 8.3K 10 17 11:54 a.out
-rwxr-xr-x 1 ad staff 8.3K 10 17 11:53 a.out-cc
543デフォルトの名無しさん
2016/10/17(月) 13:01:16.77ID:v6qceZ1M ちなみに
libobjc.A.dylib
libSystem.B.dylib
の中にいったいどんなCの関数が入っているのか?classdumpってフリーのコマンドラインツールで調べる事ができるはず。俺、やった事無いけど。
libobjc.A.dylib
libSystem.B.dylib
の中にいったいどんなCの関数が入っているのか?classdumpってフリーのコマンドラインツールで調べる事ができるはず。俺、やった事無いけど。
544デフォルトの名無しさん
2016/10/17(月) 13:15:29.63ID:v6qceZ1M せっかくだから、
class-dump /usr/lib/libobjc.A.dylib
やってみた。
@protocol NSObject
@property(readonly, copy) NSString *description;
@property(readonly) Class superclass;
@property(readonly) unsigned long long hash;
- (struct _NSZone *)zone;
- (unsigned long long)retainCount;
以下略
Cの関数は入ってなくて、Obj-Cのクラスとか、構造体とかが、入っていた。
class-dump /usr/lib/libobjc.A.dylib
やってみた。
@protocol NSObject
@property(readonly, copy) NSString *description;
@property(readonly) Class superclass;
@property(readonly) unsigned long long hash;
- (struct _NSZone *)zone;
- (unsigned long long)retainCount;
以下略
Cの関数は入ってなくて、Obj-Cのクラスとか、構造体とかが、入っていた。
545デフォルトの名無しさん
2016/10/17(月) 13:24:24.90ID:v6qceZ1M ついでに、
nm -o /usr/lib/libSystem.B.dylib | less
こいつの最初の数行は、
/usr/lib/libSystem.B.dylib: 0000000000001abb T R8289209$_pthread_attr_destroy
/usr/lib/libSystem.B.dylib: 0000000000001ac0 T R8289209$_pthread_attr_init
/usr/lib/libSystem.B.dylib: 0000000000001ac5 T R8289209$_pthread_attr_setdetachstate
/usr/lib/libSystem.B.dylib: 0000000000001aca T R8289209$_pthread_create
以下略
nm -o /usr/lib/libSystem.B.dylib | less
こいつの最初の数行は、
/usr/lib/libSystem.B.dylib: 0000000000001abb T R8289209$_pthread_attr_destroy
/usr/lib/libSystem.B.dylib: 0000000000001ac0 T R8289209$_pthread_attr_init
/usr/lib/libSystem.B.dylib: 0000000000001ac5 T R8289209$_pthread_attr_setdetachstate
/usr/lib/libSystem.B.dylib: 0000000000001aca T R8289209$_pthread_create
以下略
546デフォルトの名無しさん
2016/10/17(月) 13:32:18.66ID:yAttM8H1 >>536
それはたまたまOSX上のObjective-Cでそうなってるだけ
大抵の言語では「言語」ランタイムはスタティックリンクされるし
Objective-Cでもlibobjc.aがある環境ならスタティックリンクできる
/usr/lib/の下に.oがいくつかあるけど、こいつらも「C言語の」ランタイムでmain関数よりも前の処理になってて
大抵の実行ファイルにはどれかが暗黙にスタティックリンクされてる
それはたまたまOSX上のObjective-Cでそうなってるだけ
大抵の言語では「言語」ランタイムはスタティックリンクされるし
Objective-Cでもlibobjc.aがある環境ならスタティックリンクできる
/usr/lib/の下に.oがいくつかあるけど、こいつらも「C言語の」ランタイムでmain関数よりも前の処理になってて
大抵の実行ファイルにはどれかが暗黙にスタティックリンクされてる
547デフォルトの名無しさん
2016/10/17(月) 13:39:16.83ID:yAttM8H1 あとlibSystem.B.dylibはシステムコールラッパーとC言語の標準ライブラリの一部(libcと分割)なんで
ランタイム(実行時)ライブラリであることには間違いはないけど
C言語のランタイムというと、普通はスタートアップ(*.o)やlibgccの方を指すと思う
ランタイム(実行時)ライブラリであることには間違いはないけど
C言語のランタイムというと、普通はスタートアップ(*.o)やlibgccの方を指すと思う
548デフォルトの名無しさん
2016/10/17(月) 14:05:08.33ID:v6qceZ1M >>547
nm libSystem.B.dylibの結果はほとんど’U’タイプのSymbolでした。
man nmによると
Symbol type ‘U’ = undefinedで、実装は別ファイル、参照だけ!、って事らしいので、
実装はたとえば、libcにあるんだと思います。
nm -o libSystem.B.dylib | grep -v ‘U’すると、出力は極わずかでした。
nm libSystem.B.dylibの結果はほとんど’U’タイプのSymbolでした。
man nmによると
Symbol type ‘U’ = undefinedで、実装は別ファイル、参照だけ!、って事らしいので、
実装はたとえば、libcにあるんだと思います。
nm -o libSystem.B.dylib | grep -v ‘U’すると、出力は極わずかでした。
549デフォルトの名無しさん
2016/10/20(木) 17:05:03.85ID:8PkcGQMJ MRC時代のOSXプログラミングの書籍ってなにがありますか?(何を買えばいいですか?)
今はAppleのオンラインドキュメントなどはほとんどARC前提で記述されてるので
ネット探してもなかなか見つけられません
今はAppleのオンラインドキュメントなどはほとんどARC前提で記述されてるので
ネット探してもなかなか見つけられません
550デフォルトの名無しさん
2016/10/20(木) 17:35:44.02ID:v715sDMz 古い版の萩原本でもよみゃいいだろ。
551デフォルトの名無しさん
2016/10/20(木) 19:00:37.37ID:8PkcGQMJ >>550
https://www.amazon.co.jp/Objective‐C―MacOS-Xプログラミング入門-荻原-剛志/dp/4877780688/ref=sr_1_6?s=books&ie=UTF8&qid=1476957557&sr=1-6
これとかか?
https://www.amazon.co.jp/Objective‐C―MacOS-Xプログラミング入門-荻原-剛志/dp/4877780688/ref=sr_1_6?s=books&ie=UTF8&qid=1476957557&sr=1-6
これとかか?
552デフォルトの名無しさん
2016/10/20(木) 20:24:30.68ID:ifLlZ1yA553デフォルトの名無しさん
2016/10/25(火) 13:48:49.63ID:aBo6S+EN @interface
@implementation
これに変数2回宣言するだろ?
違いってなんですか?
@implementation
これに変数2回宣言するだろ?
違いってなんですか?
554デフォルトの名無しさん
2016/10/25(火) 14:18:03.51ID:OZkbpJ7G >>553
必要なスコープに1回宣言すればいい。
というか、外部に変数を公開する事は、特殊な事情以外ありえないから、
ヘッダにはアクセサ即ちプロパティを書けばいい。
つまりインスタンス変数なら@implementation{ } のブロックで宣言すればいいよ。
継承した子クラスからその変数へは、親クラスのアクセサ経由でアクセスするのが普通。
こうすると、ヘッダには外部に公開する情報しか現れない。
どうしても子クラスから親クラスの変数に直接触りたい場合は、
親クラスの@interface{ }ブロックで宣言する。
その場合はデフォルトでアクセス制限が@protectedになる。
必要なスコープに1回宣言すればいい。
というか、外部に変数を公開する事は、特殊な事情以外ありえないから、
ヘッダにはアクセサ即ちプロパティを書けばいい。
つまりインスタンス変数なら@implementation{ } のブロックで宣言すればいいよ。
継承した子クラスからその変数へは、親クラスのアクセサ経由でアクセスするのが普通。
こうすると、ヘッダには外部に公開する情報しか現れない。
どうしても子クラスから親クラスの変数に直接触りたい場合は、
親クラスの@interface{ }ブロックで宣言する。
その場合はデフォルトでアクセス制限が@protectedになる。
555デフォルトの名無しさん
2016/10/25(火) 14:31:48.57ID:OZkbpJ7G556デフォルトの名無しさん
2016/11/17(木) 12:45:51.00ID:0S40a4Cy インスタンスメソッドの実行に関して教えてください。
// message sending
[obj say: @
// message sending
[obj say: @
557デフォルトの名無しさん
2016/11/17(木) 13:13:08.74ID:Psw7U5GH 事切れたか
558デフォルトの名無しさん
2016/11/17(木) 13:29:09.43ID:5aO/SijD ダブルクオートとかで切れるのよく見かけるけど、@ でも切れるんかな
559デフォルトの名無しさん
2016/11/17(木) 13:29:10.81ID:0S40a4Cy ソースコードが勝手に切られちゃう(サニタイズ関係?)みたいなので画像で失礼します。
インスタンスメソッドの実行に関して教えてください。
message sending / function pointer
どちらの方法でもちゃんと動くのは確認できましたが、
なぜ後者はSELパラメータが必須(この場合selector) な仕様になっているんでしょう?
冗長に見えますが何か意味があるんでしょうか。
インスタンスメソッドの実行に関して教えてください。
message sending / function pointer
どちらの方法でもちゃんと動くのは確認できましたが、
なぜ後者はSELパラメータが必須(この場合selector) な仕様になっているんでしょう?
冗長に見えますが何か意味があるんでしょうか。
560デフォルトの名無しさん
2016/11/17(木) 13:30:21.21ID:5aO/SijD @ の次は当然 " がくるだろうけど、今まで1個目の"が表示されて切れるんだよなあ
561デフォルトの名無しさん
2016/11/17(木) 13:33:39.43ID:0S40a4Cy > SELパラメータが必須
instanceMethodForSelector: の時点で伝えてあるのに、なぜ実行時にも必要になるのかという事です。
instanceMethodForSelector: の時点で伝えてあるのに、なぜ実行時にも必要になるのかという事です。
562デフォルトの名無しさん
2016/11/17(木) 13:40:44.67ID:+o4tuiiL >>561
1.instanceMethodForSelectorでメソッドの実体である関数のポインタを取得(IMP func)
2.funcをキャストして呼び出し
2のときに、メソッドの暗黙の第1,第2引数である id obj, SEL selectorを渡してます。
1.instanceMethodForSelectorでメソッドの実体である関数のポインタを取得(IMP func)
2.funcをキャストして呼び出し
2のときに、メソッドの暗黙の第1,第2引数である id obj, SEL selectorを渡してます。
563デフォルトの名無しさん
2016/11/17(木) 13:54:11.06ID:0S40a4Cy ありがとうございます。それでは改めて聞き直します。
メソッドの暗黙の第2引数が SEL である、そもそもの設計の意図はなんなんでしょう。
内部で振り分ければいいので複数のメソッドに対して一つの関数(ポインタ)が共通で対応可能とか?
それが実際にできたとして何かメリットがあるんでしょうか。
メソッドの暗黙の第2引数が SEL である、そもそもの設計の意図はなんなんでしょう。
内部で振り分ければいいので複数のメソッドに対して一つの関数(ポインタ)が共通で対応可能とか?
それが実際にできたとして何かメリットがあるんでしょうか。
564デフォルトの名無しさん
2016/11/17(木) 14:00:22.50ID:f6OBJy8Y セレクタを見て他のメソッドにデリゲートするとか。
565デフォルトの名無しさん
2016/11/17(木) 14:05:35.87ID:+o4tuiiL ランタイムは、渡されたセレクタをメソッドリストから検索して、有れば実行、無ければエラー。
ってことかな。
ってことかな。
566デフォルトの名無しさん
2016/11/17(木) 14:28:15.44ID:+o4tuiiL IMP使った場合はランタイムは経由しないでダイレクトに関数コールするけど、
通常は動的にメソッド呼び出しをするのでそういう仕様になってる。
のではないだろうか。
通常は動的にメソッド呼び出しをするのでそういう仕様になってる。
のではないだろうか。
567デフォルトの名無しさん
2016/11/17(木) 18:17:20.63ID:ZyPoEOxl サブクラスでのオーバーライドをサポートするために
だと思うよ。
だと思うよ。
568デフォルトの名無しさん
2016/11/17(木) 21:32:33.37ID:XVALpd1q Smalltalkで、実行中メソッドのコンテキスト内からそのセレクタを得ることができる機構を
Objective-Cでも_cmdパラメーターを介して模したかったからなのでは?
Object subclass: Foo [ bar [ thisContext method selector displayNl ] ]
Foo new bar "=> #bar "
Objective-Cでも_cmdパラメーターを介して模したかったからなのでは?
Object subclass: Foo [ bar [ thisContext method selector displayNl ] ]
Foo new bar "=> #bar "
569デフォルトの名無しさん
2016/11/17(木) 23:13:49.69ID:+o4tuiiL だいたいその辺の、実行時解決を実現したかったという理由だと思うけど、
ランタイムがメソッド呼び出しするときの動作は
1.レシーバがnilかどうか
2.レシーバのメソッドリストに該当メソッドがあるか
3.なければスーパークラスにあるか
4.なければthrow exception
だよね。
だからメソッド呼ぶときはランタイムにレシーバとselectorを渡して調べてもらう必要が有るんですよ。
ランタイムがメソッド呼び出しするときの動作は
1.レシーバがnilかどうか
2.レシーバのメソッドリストに該当メソッドがあるか
3.なければスーパークラスにあるか
4.なければthrow exception
だよね。
だからメソッド呼ぶときはランタイムにレシーバとselectorを渡して調べてもらう必要が有るんですよ。
570デフォルトの名無しさん
2016/11/17(木) 23:51:59.51ID:8N+auLd3 レシーバはselfとして使うから必要なのはわかるんだけど、セレクタはいつ必要になるの?
ランタイムに調べてもらうのは関数(メソッド実体)コールの前だろうから、コール時にはすでに不要な情報だよね
ランタイムに調べてもらうのは関数(メソッド実体)コールの前だろうから、コール時にはすでに不要な情報だよね
571デフォルトの名無しさん
2016/11/18(金) 00:08:47.34ID:QxITf25H572デフォルトの名無しさん
2016/11/18(金) 02:19:58.76ID:QxITf25H >>570
ちなみにこれでも動作する。id,SELは渡してない。
void(*f)(void) = [ViewController instanceMethodForSelector:@selector(hoge)];
f();
- (void)hoge
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
SELを渡してないので null と出力される
idも渡してないので、hoge内でselfにアクセスすると落ちる。
ちなみにこれでも動作する。id,SELは渡してない。
void(*f)(void) = [ViewController instanceMethodForSelector:@selector(hoge)];
f();
- (void)hoge
{
NSLog(@"%@", NSStringFromSelector(_cmd));
}
SELを渡してないので null と出力される
idも渡してないので、hoge内でselfにアクセスすると落ちる。
573デフォルトの名無しさん
2016/11/18(金) 08:55:20.76ID:1f4/DDXi なるほどこれはわかりやすい
574デフォルトの名無しさん
2016/11/18(金) 09:33:05.33ID:sBZu/NEl BathyScapheっていう2ch Viewer使ってます。
>>559
みたいな画像をuploadするにはどうすればいいっすか?
2chのサイトではdrawツールがブラウザ内にあって、それで落書きはできるみたいですが、pngとかgif画像をuploadしたいのです。
>>559
みたいな画像をuploadするにはどうすればいいっすか?
2chのサイトではdrawツールがブラウザ内にあって、それで落書きはできるみたいですが、pngとかgif画像をuploadしたいのです。
575デフォルトの名無しさん
2016/11/18(金) 11:55:15.19ID:U2qFJJrM576デフォルトの名無しさん
2016/11/18(金) 11:57:16.56ID:U2qFJJrM まあ、すぐにサイズオーバーになるのでごく簡単な絵しかアップできません。
577デフォルトの名無しさん
2016/11/18(金) 12:14:37.99ID:8cb+/Ta9 消せないから気軽にあげられないのがちょっとあれよね
プログラム板なんだから自分で書けば良いよ
てことでobjcで書いてみた
サイズの頭打ちがあるからと思ってインデックスカラーに圧縮したけど弾かれるのね
プログラム板なんだから自分で書けば良いよ
てことでobjcで書いてみた
サイズの頭打ちがあるからと思ってインデックスカラーに圧縮したけど弾かれるのね
578デフォルトの名無しさん
2016/11/18(金) 12:22:18.47ID:U2qFJJrM IMP関数ポインタの SELパラメターの件
正直言うと、自分にはコメの意見の善し悪しを判断する能力ありません...。
ググるとこれ使って >>559 で書いたような事ができるようですが (参考:class_addMethod)
設計側はそういう用途まで考慮していたのかは、よく分かりませんでした。
シグネチャを共通にしたかった? どうなんでしょう、それって何か気持ちいいから以上の理由はあるんですかね。
正直言うと、自分にはコメの意見の善し悪しを判断する能力ありません...。
ググるとこれ使って >>559 で書いたような事ができるようですが (参考:class_addMethod)
設計側はそういう用途まで考慮していたのかは、よく分かりませんでした。
シグネチャを共通にしたかった? どうなんでしょう、それって何か気持ちいいから以上の理由はあるんですかね。
579デフォルトの名無しさん
2016/11/18(金) 12:39:28.44ID:QxITf25H >>578
シグネチャが共通というより、同一の関数なので同じシグネチャなんですよ。
ランタイムが呼ぶメソッドの実体も、IMPを取得してダイレクトに呼ぶ関数も、「同じ関数」です。
その関数の引数が (id, SEL, …) なんですね。
シグネチャが共通というより、同一の関数なので同じシグネチャなんですよ。
ランタイムが呼ぶメソッドの実体も、IMPを取得してダイレクトに呼ぶ関数も、「同じ関数」です。
その関数の引数が (id, SEL, …) なんですね。
580デフォルトの名無しさん
2016/11/18(金) 12:42:31.61ID:QxITf25H で、自分はIMPは使いません。
IMPを使うくらいならCの関数を書けばいいだけなので。
IMPを使うくらいならCの関数を書けばいいだけなので。
581デフォルトの名無しさん
2016/11/18(金) 12:51:34.13ID:QxITf25H Objective-Cは、以前はメソッド呼び出しのオーバーヘッドがネックになってたようなので、
IMPのAPIは、既存クラスのメソッドを高速に呼び出すために作ったんじゃないですかね。
IMPのAPIは、既存クラスのメソッドを高速に呼び出すために作ったんじゃないですかね。
582デフォルトの名無しさん
2016/11/18(金) 13:05:14.30ID:sBZu/NEl >>576
いやぁ、うれしい。
秘伝のテクを開陳してくれて、あんがとう。
けど、JavaSou苦手なんすよねぇ。
tarea(text area)を取得して、その直前にinput, script要素を挿入してinputボタンの押下で
foo関数を呼ぶ様にしてるって事みたい。
FireFoxもGeasemonkeyも使った事無いっす。
Safari, Chromeでも同じ事できるんでしょうか?
Geasemonkey for Safari, Chromeを探せって事なんすね。
いま、WKWebViewでもloadしたhtml, cssを書き換えられないか?調べてます。
Geasemonkey likeな動作をどうやってさせようかと!
いやぁ、うれしい。
秘伝のテクを開陳してくれて、あんがとう。
けど、JavaSou苦手なんすよねぇ。
tarea(text area)を取得して、その直前にinput, script要素を挿入してinputボタンの押下で
foo関数を呼ぶ様にしてるって事みたい。
FireFoxもGeasemonkeyも使った事無いっす。
Safari, Chromeでも同じ事できるんでしょうか?
Geasemonkey for Safari, Chromeを探せって事なんすね。
いま、WKWebViewでもloadしたhtml, cssを書き換えられないか?調べてます。
Geasemonkey likeな動作をどうやってさせようかと!
583デフォルトの名無しさん
2016/11/18(金) 21:20:02.14ID:U2qFJJrM ObjCスレだからObjCで頑張るのはアリかもしれませんけど、物事には適材適所ってもんがあるとおも...。
584デフォルトの名無しさん
2016/11/19(土) 03:19:56.84ID:vr8hDAX5 適材適所かどうかは自明ではないね
585デフォルトの名無しさん
2016/11/26(土) 10:43:02.50ID:EbyefIsj みんなSwiftに移行しちゃったの?
Swift始めた頃、小さな仕様がコロコロ変わるからObj-Cに戻ってきてたけど
もう安定したのかな。
Swift始めた頃、小さな仕様がコロコロ変わるからObj-Cに戻ってきてたけど
もう安定したのかな。
586デフォルトの名無しさん
2016/11/28(月) 16:59:47.56ID:AK2eqXeC >>585
Swift3でメソッド名の整理が行われて、短くなった。
"Taylor".writeToFile("filename", atomically: true, encoding: NSUTF8StringEncoding)
"Taylor".write(toFile: "somefile", atomically: true, encoding: String.Encoding.utf8)
上2.3/下3
Swift3が良さげに見えるのでObj-Cからの移行者がボチボチ増えてるかも。
Swift3でメソッド名の整理が行われて、短くなった。
"Taylor".writeToFile("filename", atomically: true, encoding: NSUTF8StringEncoding)
"Taylor".write(toFile: "somefile", atomically: true, encoding: String.Encoding.utf8)
上2.3/下3
Swift3が良さげに見えるのでObj-Cからの移行者がボチボチ増えてるかも。
587デフォルトの名無しさん
2016/11/30(水) 23:57:30.93ID:48Nf+yqm588デフォルトの名無しさん
2016/12/01(木) 09:30:20.02ID:RHRo1hP4 コンパイラとしての安定性は最初から問題無いんじゃない?
コンパイラが原因でアプリが落ちるっては経験無いなぁ。
C++、Javaが最近仕様変更が激しいのと同じく、Swiftだって言語仕様変更があるって事で、コンパイラとしては安定してると思う。
例:C++TR1, C++11, C++14
JavaSE6, 7, 8, 9
Swift3の言語仕様変更は、現在アナウンスされてないんじゃないのか?Swift4ってのはABIの導入って事で、言語仕様の変更じゃ無いし。
コンパイラが原因でアプリが落ちるっては経験無いなぁ。
C++、Javaが最近仕様変更が激しいのと同じく、Swiftだって言語仕様変更があるって事で、コンパイラとしては安定してると思う。
例:C++TR1, C++11, C++14
JavaSE6, 7, 8, 9
Swift3の言語仕様変更は、現在アナウンスされてないんじゃないのか?Swift4ってのはABIの導入って事で、言語仕様の変更じゃ無いし。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★2 [蚤の市★]
- 高市首相の答弁書に「台湾有事答えない」と明記 存立危機発言当時 ★7 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- 【STARTO ENTERTAINMENT】SUPER EIGHTの横山裕、フジ『ドッキリGP』ロケで全治2ヶ月の重傷 [Ailuropoda melanoleuca★]
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 ★2 [蚤の市★]
- 公用車カーナビのNHK受信料「全額免除を」 千葉市議会、国に制度創設求める意見書可決 [少考さん★]
- 【朗報】愛国保守党の公約、ガチでアリだと話題にwwwwwwwwww
- 【朗報】南鳥島のレアアース、中国産の「20倍の純度」青山繁晴氏「日本は資源大国」日本復活のファンファーレが鳴り響く! [673057929]
- 愛国者「釘を使わない日本独自の伝統工法スゴイ!」X民「それ中国起源ですよ」→批判殺到 [834922174]
- ハイドロポンプ←これなんて略してる?
- 👊😅👊三☁😶‍🌫三⛅🏡
- コーヒー、来年3月から30パーセント値上げへ [709039863]
