Objective-C(オブジェクティブ シー)はプログラミング言語の一種。C言語をベースにSmalltalk型のオブジェクト指向機能を持たせた上位互換言語。
(Wikipedia:http://ja.wikipedia.org/wiki/Objective-C より)
前スレ
Objective-C [ObjC part:8.1];
http://mevius.2ch.net/test/read.cgi/tech/1414816517/
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:9];
■ このスレッドは過去ログ倉庫に格納されています
2017/11/17(金) 21:00:33.77ID:oYmLZZ1y
2017/11/17(金) 21:03:20.46ID:oYmLZZ1y
*** プログラム技術板 ***
【マック】Macintoshプログラミング質問箱
http://peace.2ch.net/test/read.cgi/tech/1113058054/
*** プログラマ板 ***
【Cocoa】Macプログラマのスレ【Objective-C】
http://kanae.2ch.net/test/read.cgi/prog/1214208397/
*** 新・mac板 ***
Macでプログラミング{11}
http://anago.2ch.net/test/read.cgi/mac/1414566499/
Xcode part14
http://egg.2ch.net/test/read.cgi/mac/1476190499/
プログラミング言語Swift Part4
http://egg.2ch.net/test/read.cgi/mac/1484763495/
【マック】Macintoshプログラミング質問箱
http://peace.2ch.net/test/read.cgi/tech/1113058054/
*** プログラマ板 ***
【Cocoa】Macプログラマのスレ【Objective-C】
http://kanae.2ch.net/test/read.cgi/prog/1214208397/
*** 新・mac板 ***
Macでプログラミング{11}
http://anago.2ch.net/test/read.cgi/mac/1414566499/
Xcode part14
http://egg.2ch.net/test/read.cgi/mac/1476190499/
プログラミング言語Swift Part4
http://egg.2ch.net/test/read.cgi/mac/1484763495/
2017/11/17(金) 21:09:55.63ID:oYmLZZ1y
*** 本家 ***
Objective-C プログラミング言語
https://developer.apple.com/jp/documentation/ProgrammingWithObjectiveC.pdf
Objective-C 2.0 プログラミング言語
ttp://read.pudn.com/downloads152/ebook/665246/ObjC.pdf
Blocksプログラミングトピックス
https://developer.apple.com/jp/documentation/Blocks.pdf
並列プログラミングガイド - GCDとか
https://developer.apple.com/jp/devcenter/ios/library/documentation/ConcurrencyProgrammingGuide.pdf
Objective-C Feature Availability Index
https://developer.apple.com/Library/mac/releasenotes/ObjectiveC/ObjCAvailabilityIndex/index.html
Objective-C Runtime Programming Guide
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html
そのほか英語
https://developer.apple.com/library/mac/navigation/
*** 書籍 ***
荻原本 第3版/Kindle 版も有り
http://amazon.jp/dp/4797368276
HMDTダイナミック本
http://amazon.jp/dp/4861006414
Objective-C プログラミング言語
https://developer.apple.com/jp/documentation/ProgrammingWithObjectiveC.pdf
Objective-C 2.0 プログラミング言語
ttp://read.pudn.com/downloads152/ebook/665246/ObjC.pdf
Blocksプログラミングトピックス
https://developer.apple.com/jp/documentation/Blocks.pdf
並列プログラミングガイド - GCDとか
https://developer.apple.com/jp/devcenter/ios/library/documentation/ConcurrencyProgrammingGuide.pdf
Objective-C Feature Availability Index
https://developer.apple.com/Library/mac/releasenotes/ObjectiveC/ObjCAvailabilityIndex/index.html
Objective-C Runtime Programming Guide
https://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Introduction/Introduction.html
そのほか英語
https://developer.apple.com/library/mac/navigation/
*** 書籍 ***
荻原本 第3版/Kindle 版も有り
http://amazon.jp/dp/4797368276
HMDTダイナミック本
http://amazon.jp/dp/4861006414
2017/11/17(金) 21:14:12.48ID:oYmLZZ1y
Objective-C Literals ― Clang 3.6 documentation
http://clang.llvm.org/docs/ObjectiveCLiterals.html
Apple のランタイムのソースコード
http://www.opensource.apple.com/source/objc4/
ダイナミック Objective-C サイト
http://news.mynavi.jp/column/objc/
英語のサイト
Objective-C 入門
http://cocoadevcentral.com/d/learn_objectivec/
Objective-C Style 1, 2 (変数名のつけかた等)
http://cocoadevcentral.com/articles/000082.php
http://cocoadevcentral.com/articles/000083.php
Mike Ash さん(Audio Hijack の中の人)のブログ、 Obj-C のランタイムの話が良く出る
http://mikeash.com/?page=pyblog/
C++ と Objective-C の文法の比較
http://static.stevereads.com/papers_to_read/from_c_to_objective-c.pdf
http://clang.llvm.org/docs/ObjectiveCLiterals.html
Apple のランタイムのソースコード
http://www.opensource.apple.com/source/objc4/
ダイナミック Objective-C サイト
http://news.mynavi.jp/column/objc/
英語のサイト
Objective-C 入門
http://cocoadevcentral.com/d/learn_objectivec/
Objective-C Style 1, 2 (変数名のつけかた等)
http://cocoadevcentral.com/articles/000082.php
http://cocoadevcentral.com/articles/000083.php
Mike Ash さん(Audio Hijack の中の人)のブログ、 Obj-C のランタイムの話が良く出る
http://mikeash.com/?page=pyblog/
C++ と Objective-C の文法の比較
http://static.stevereads.com/papers_to_read/from_c_to_objective-c.pdf
2017/11/17(金) 21:15:12.40ID:oYmLZZ1y
Swift と関連する Obj-C ドキュメント
*** 本家 ***
Using Swift with Cocoa and Objective-C
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/index.html#//apple_ref/doc/uid/TP40014216
Swift and Objective-C in the Same Project
https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html
Adopting Modern Objective-C
https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html
Embedding Content with Swift in Objective-C
https://developer.apple.com/library/ios/qa/qa1881/_index.html
*** 本家 ***
Using Swift with Cocoa and Objective-C
https://developer.apple.com/library/ios/documentation/Swift/Conceptual/BuildingCocoaApps/index.html#//apple_ref/doc/uid/TP40014216
Swift and Objective-C in the Same Project
https://developer.apple.com/library/ios/documentation/swift/conceptual/buildingcocoaapps/MixandMatch.html
Adopting Modern Objective-C
https://developer.apple.com/library/ios/releasenotes/ObjectiveC/ModernizationObjC/AdoptingModernObjective-C/AdoptingModernObjective-C.html
Embedding Content with Swift in Objective-C
https://developer.apple.com/library/ios/qa/qa1881/_index.html
2017/11/17(金) 21:30:22.97ID:0jV1JJrR
>>1
とりあえずw、さんきゅーっ
とりあえずw、さんきゅーっ
2017/11/17(金) 22:13:33.72ID:00kx/Fcv
前スレ最後の方は
「ぼく電気工事士ですけど、ブレーカーとスイッチの違いってなんですかね?
いつも電気ケトルでお湯沸かすのにブレーカーオンオフしてますけど?」
みたいでトリップ感あった。
「ぼく電気工事士ですけど、ブレーカーとスイッチの違いってなんですかね?
いつも電気ケトルでお湯沸かすのにブレーカーオンオフしてますけど?」
みたいでトリップ感あった。
8デフォルトの名無しさん
2017/11/17(金) 22:14:19.37ID:Tpi/0V/R メソッドに渡されるselfがclassのポインタかインスタンスのポインタかの違い
って言ってもわからんだろうな
って言ってもわからんだろうな
2017/11/17(金) 22:18:26.81ID:Q8rdVBz+
>>7
上手い例えだと思う。
上手い例えだと思う。
10デフォルトの名無しさん
2017/11/17(金) 22:45:46.26ID:KuiGlQ+X わかりました!
クラスメソッドはプロジェクトで1つしかインスタンスが持てない
インスタンスメソッドは複数持てる
ですね!
つまりメソッドのロジックは同じで内部変数が違うものをいくつも同時に保持したいかどうかですね!
クラスメソッドはプロジェクトで1つしかインスタンスが持てない
インスタンスメソッドは複数持てる
ですね!
つまりメソッドのロジックは同じで内部変数が違うものをいくつも同時に保持したいかどうかですね!
2017/11/17(金) 22:51:49.08ID:EkFnC7lu
一周回って合ってるおめでとう
2017/11/17(金) 22:57:51.02ID:Tpi/0V/R
ちょっと違う
13デフォルトの名無しさん
2017/11/17(金) 22:58:24.49ID:KuiGlQ+X ありがとうございます!
14デフォルトの名無しさん
2017/11/17(金) 22:59:02.57ID:KuiGlQ+X あれ?(汗)
2017/11/17(金) 23:04:16.69ID:oYmLZZ1y
逆に面白い解釈で初心者に解説する時の勉強になる可能性?
は無いか。
ここでNSObjctのインスタンスを見てみると
objc_object という構造体であり
中には Class ってのがいるだけだ
struct objc_object {
Class isa OBJC_ISA_AVAILABILITY;
};
Classってのはobjc_classと定義されているこんな感じの構造体だ
struct objc_class {
Class isa OBJC_ISA_AVAILABILITY;
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
};
そうインスタンスとはクラスを持っていてクラスはインスタンスを持っていないのだ
クラスメソッドもインスタンスメソッドもクラス構造体の中で定義されていて呼び出せる範囲が違うだけなのだ
そしてメソッドがインスタンスを持っているわけではなく
インスタンスの中のクラスの中にある物を呼び出しているのだ
これは構造はなくルールに近い話になる
は無いか。
ここでNSObjctのインスタンスを見てみると
objc_object という構造体であり
中には Class ってのがいるだけだ
struct objc_object {
Class isa OBJC_ISA_AVAILABILITY;
};
Classってのはobjc_classと定義されているこんな感じの構造体だ
struct objc_class {
Class isa OBJC_ISA_AVAILABILITY;
Class super_class OBJC2_UNAVAILABLE;
const char *name OBJC2_UNAVAILABLE;
long version OBJC2_UNAVAILABLE;
long info OBJC2_UNAVAILABLE;
long instance_size OBJC2_UNAVAILABLE;
struct objc_ivar_list *ivars OBJC2_UNAVAILABLE;
struct objc_method_list **methodLists OBJC2_UNAVAILABLE;
struct objc_cache *cache OBJC2_UNAVAILABLE;
struct objc_protocol_list *protocols OBJC2_UNAVAILABLE;
};
そうインスタンスとはクラスを持っていてクラスはインスタンスを持っていないのだ
クラスメソッドもインスタンスメソッドもクラス構造体の中で定義されていて呼び出せる範囲が違うだけなのだ
そしてメソッドがインスタンスを持っているわけではなく
インスタンスの中のクラスの中にある物を呼び出しているのだ
これは構造はなくルールに近い話になる
2017/11/17(金) 23:09:06.54ID:Tpi/0V/R
>>14
インスタンスメソッドも、メモリに確保される実体は一つだけ
インスタンスをいくら作ろうがメソッドの実体は一つ
selfが違うからインスタンスごとに確保されたように見えるんだろ?
インスタンスを生成するごとに新たにメモリに確保されてるのはインスタンス変数
インスタンスメソッドも、メモリに確保される実体は一つだけ
インスタンスをいくら作ろうがメソッドの実体は一つ
selfが違うからインスタンスごとに確保されたように見えるんだろ?
インスタンスを生成するごとに新たにメモリに確保されてるのはインスタンス変数
17デフォルトの名無しさん
2017/11/17(金) 23:21:41.87ID:KuiGlQ+X ロジックは1つで変数が複数ですね。
確かに無駄がないですね!
ここは超人レベルの方ばかりで難しいんですが、親切なので助かりました!
確かに無駄がないですね!
ここは超人レベルの方ばかりで難しいんですが、親切なので助かりました!
2017/11/17(金) 23:25:13.48ID:wg33BRe2
そうです
2017/11/17(金) 23:59:36.79ID:yjTQ4fwn
なぜ多くの開発者が今なお Swift よりも Objective-C を好むのか
https://frasco.io/why-many-developers-still-prefer-objective-c-to-swift-2c624232cdd2
https://frasco.io/why-many-developers-still-prefer-objective-c-to-swift-2c624232cdd2
20デフォルトの名無しさん
2017/11/18(土) 00:00:27.78ID:jHta9B9D もう一つ聞いていいですか。
Self.hensuと_hensuって同じものですか?
とりあえず全部_hensuで書いてます。
Self.hensuと_hensuって同じものですか?
とりあえず全部_hensuで書いてます。
2017/11/18(土) 00:11:21.74ID:GufJ21C4
>>20
Self.hensuはゲッターが呼び出される
例えばこんな感じ
-(id)hensu{
return _hensu;
}
これは
@synthesize hensu = _hensu;
としてインスタンス変数の_hensuを紐づけてると言う事
_hensuは直接_hensuを取る
取る時はそこまで問題にならないけど
セットする時は@propertyでretainを指定してる時は
@property (retain)id hensu;
Self.hensu = obj;
とするだけでセッターの中でretainしてくれるので
_hensu = obj;
とするより安全
色々自動で処理されて記述量が減った分、省略され過ぎて逆に分け分からなくなってる所は多い
Self.hensuはゲッターが呼び出される
例えばこんな感じ
-(id)hensu{
return _hensu;
}
これは
@synthesize hensu = _hensu;
としてインスタンス変数の_hensuを紐づけてると言う事
_hensuは直接_hensuを取る
取る時はそこまで問題にならないけど
セットする時は@propertyでretainを指定してる時は
@property (retain)id hensu;
Self.hensu = obj;
とするだけでセッターの中でretainしてくれるので
_hensu = obj;
とするより安全
色々自動で処理されて記述量が減った分、省略され過ぎて逆に分け分からなくなってる所は多い
22デフォルトの名無しさん
2017/11/18(土) 00:24:14.19ID:jHta9B9D せっかく値保持したくてretainにしていても_hensuにセットしてたら効果なくて、アプリが落ちるかもってことですね!
うわー、今までたくさん書いてきちゃった
うわー、今までたくさん書いてきちゃった
2017/11/18(土) 00:41:51.30ID:GufJ21C4
例えばこうしたら
@interface test(){
int _iHensu, _hensu;
}
@property (assign)int hensu;
@end
@implementation test
@synthesize hensu = _iHensu;
- (void)test{
_hensu = 10;
_iHensu = 90;
NSLog(@"h1 %d", _hensu); //10
NSLog(@"h2 %d", self.hensu);//90
}
@synthesize で hensuに_iHensuを登録すれば
self.hensuで呼び出されるのは_iHensuになる感じ
これはプリミティブ型のintだからassignだけど
オブジェクト型のインスタンスを
MRRチックに自分でretainするならセッター使わなくても問題ないよ
もちろんreleaseも必要
セッターゲッター使うとそれを省略出来るってこと
retainもセッターの中で
こんな感じの関数が呼ばれるだけだから
- (void)setHensu:(id)value{
if(_iHensu != value){
id oldValue = _iHensu;
_iHensu = (value != nil ? [value retain] : nil);
if(oldValue != nil) [oldValue release];
}
}
@interface test(){
int _iHensu, _hensu;
}
@property (assign)int hensu;
@end
@implementation test
@synthesize hensu = _iHensu;
- (void)test{
_hensu = 10;
_iHensu = 90;
NSLog(@"h1 %d", _hensu); //10
NSLog(@"h2 %d", self.hensu);//90
}
@synthesize で hensuに_iHensuを登録すれば
self.hensuで呼び出されるのは_iHensuになる感じ
これはプリミティブ型のintだからassignだけど
オブジェクト型のインスタンスを
MRRチックに自分でretainするならセッター使わなくても問題ないよ
もちろんreleaseも必要
セッターゲッター使うとそれを省略出来るってこと
retainもセッターの中で
こんな感じの関数が呼ばれるだけだから
- (void)setHensu:(id)value{
if(_iHensu != value){
id oldValue = _iHensu;
_iHensu = (value != nil ? [value retain] : nil);
if(oldValue != nil) [oldValue release];
}
}
24デフォルトの名無しさん
2017/11/18(土) 00:50:08.22ID:jHta9B9D 知り尽くしてますね!
コツコツ_をselfに置換する方向でいこうかと思います(泣)
コツコツ_をselfに置換する方向でいこうかと思います(泣)
2017/11/18(土) 01:15:54.95ID:GufJ21C4
ただ処理速度の観点からいくとクリティカルな部分ではゲッターの関数呼び出しより
直接インスタンス変数を呼んだ方が良い場合もあるセッターもしかり
自分でコントロール出来るなら出来合いの関数を使わない方がスマートだったりする
あと
@property (assign)int hensu;
と登録してる場合は自動でソースにセッターも追加されてるから
関数を書かなくても
[self setHensu:10];
と
self.hensu = 10;
は同じなんだけど前者の書き方の方が都合がいい場合もあるから覚えとくと良い
自動入力での候補から入力した場合も数値まで行くから多少速い気もするし (これは慣れかもしれないけど
ちなみに@property setter =やgetter = で呼び出しの関数を変える事も出来るよ
こういうのを覚えておくとセッター関数をオーバーライドして同期処理を追加したりして
KVOを登録しないでKVOチックな事が出来たりする
直接インスタンス変数を呼んだ方が良い場合もあるセッターもしかり
自分でコントロール出来るなら出来合いの関数を使わない方がスマートだったりする
あと
@property (assign)int hensu;
と登録してる場合は自動でソースにセッターも追加されてるから
関数を書かなくても
[self setHensu:10];
と
self.hensu = 10;
は同じなんだけど前者の書き方の方が都合がいい場合もあるから覚えとくと良い
自動入力での候補から入力した場合も数値まで行くから多少速い気もするし (これは慣れかもしれないけど
ちなみに@property setter =やgetter = で呼び出しの関数を変える事も出来るよ
こういうのを覚えておくとセッター関数をオーバーライドして同期処理を追加したりして
KVOを登録しないでKVOチックな事が出来たりする
2017/11/18(土) 01:58:32.81ID:GufJ21C4
あ、ちなみにオブジェクト型の個別のretain とか release はMRCでの話で
ARCだとまた少し話が変わってくるわけだけどもね
そんなに気にしなくても美味い事やってくれますよ彼女なら
ARCだとまた少し話が変わってくるわけだけどもね
そんなに気にしなくても美味い事やってくれますよ彼女なら
27デフォルトの名無しさん
2017/11/18(土) 03:58:01.57ID:jHta9B9D objective-cってなんかすごく深いですね
28ビル・ジョブス
2017/11/18(土) 08:36:45.51ID:22t4JudU X MRC
O MRR - Manual Retain Release
O MRR - Manual Retain Release
2017/11/18(土) 09:39:22.21ID:GufJ21C4
2017/11/18(土) 09:52:05.60ID:y+yjhIU6
こんな感じに理解してたんですけど合ってます?
-initWithString
インスタンスメソッド。allocしないと使えない。あとでreleaseが必要。
+stringWithString
クラスメソッド。allocしなくていい。
autoreleasepoolに登録された状態のインスタンスが返るので、
releaseしなくていい。
ARCだと、「releaseしなくていい」という
コンビニエンス・コンストラクタのメリットが薄れた。
(気軽にallocしちゃってもメモリリークしない)
-initWithString
インスタンスメソッド。allocしないと使えない。あとでreleaseが必要。
+stringWithString
クラスメソッド。allocしなくていい。
autoreleasepoolに登録された状態のインスタンスが返るので、
releaseしなくていい。
ARCだと、「releaseしなくていい」という
コンビニエンス・コンストラクタのメリットが薄れた。
(気軽にallocしちゃってもメモリリークしない)
2017/11/18(土) 10:19:53.99ID:QpBxoTJw
>>30
今時Obj-CでMRRを使う場面は無いと思うが、参照カウント方式は基本なので教えると
Obj *obj = [[Obj alloc] init];
“init”から始まる、名前がlower camel caseのインスタンスメソッドは、retain済みのオブジェクトのポインタを返す
これを「initファミリー」と言い、この命名規則を守れば自作メソッドでも自動的にretain済みを返す
変数objはただのポインタで、-initから返る上記のポインタ値を代入してるだけ
retain済みなので使いおわったら-releaseを呼んで解放する
AppleのAPIの、いわゆるコンビニエンスコンストラクタはautorelease済みのオブジェクトを返すので、releaseしてはならない
その場合main()のautoreleasepoolに登録されるので解放されるのはアプリ終了時になる
解放のタイミングを自分で制御したい場合はinitファミリーを使うかautoreleasepoolで囲うかする必要がある
今時Obj-CでMRRを使う場面は無いと思うが、参照カウント方式は基本なので教えると
Obj *obj = [[Obj alloc] init];
“init”から始まる、名前がlower camel caseのインスタンスメソッドは、retain済みのオブジェクトのポインタを返す
これを「initファミリー」と言い、この命名規則を守れば自作メソッドでも自動的にretain済みを返す
変数objはただのポインタで、-initから返る上記のポインタ値を代入してるだけ
retain済みなので使いおわったら-releaseを呼んで解放する
AppleのAPIの、いわゆるコンビニエンスコンストラクタはautorelease済みのオブジェクトを返すので、releaseしてはならない
その場合main()のautoreleasepoolに登録されるので解放されるのはアプリ終了時になる
解放のタイミングを自分で制御したい場合はinitファミリーを使うかautoreleasepoolで囲うかする必要がある
2017/11/18(土) 10:34:38.89ID:QpBxoTJw
{ initファミリー/retain } と { release } は対で使うこと
View *view_ = [[View alloc] initWithFrame:CGRectMake(0,0,100,100)];
[self.view addSubview:view_];
[view_ release]; //上記initWithFrameと対
これはself.viewがview_をretainして保持するので、以降直接参照しないのならここでreleaseしても良い
self.viewはselfが解放されるときに解放され、その時にview_にもreleaseが呼ばれる //self.view側で呼んだretainと対
View *view_ = [[View alloc] initWithFrame:CGRectMake(0,0,100,100)];
[self.view addSubview:view_];
[view_ release]; //上記initWithFrameと対
これはself.viewがview_をretainして保持するので、以降直接参照しないのならここでreleaseしても良い
self.viewはselfが解放されるときに解放され、その時にview_にもreleaseが呼ばれる //self.view側で呼んだretainと対
2017/11/18(土) 10:38:27.21ID:QpBxoTJw
対で使うのが大原則なので、例えば
@property (retain) id obj;
というプロパティを持ったクラスなら必ずそれをdeallocでreleaseすること
- (void)dealloc
{
[_obj release];
[super dealloc];
}
@property (retain) id obj;
というプロパティを持ったクラスなら必ずそれをdeallocでreleaseすること
- (void)dealloc
{
[_obj release];
[super dealloc];
}
2017/11/18(土) 10:41:50.62ID:QpBxoTJw
こんなことを全自動でやるのがARCなので、普通はARC使うけどね
でARCとは、ビルド時にretain/releaseの行を、strong/weakに応じて挿入するだけで実現できているのだ
シンプルだね
でARCとは、ビルド時にretain/releaseの行を、strong/weakに応じて挿入するだけで実現できているのだ
シンプルだね
2017/11/18(土) 11:34:23.42ID:y+yjhIU6
>>31-34
詳しい説明ありがとうございます!
自作メソッドでも、initから始めると自動的にretainされるのは
知らなかったです。
あと、main()のautoreleasepoolが解放されるのは
アプリ終了時、というのも分かってなかった…。
ARCがない時は、メモリリークが怖くて、
コンビニエンス・コンストラクタばっかり使ってましたけど、
あんまり意味がなかったのかも…。
今はARCのおかげで、何も考えずにallocとかnewできて
楽になりました。
詳しい説明ありがとうございます!
自作メソッドでも、initから始めると自動的にretainされるのは
知らなかったです。
あと、main()のautoreleasepoolが解放されるのは
アプリ終了時、というのも分かってなかった…。
ARCがない時は、メモリリークが怖くて、
コンビニエンス・コンストラクタばっかり使ってましたけど、
あんまり意味がなかったのかも…。
今はARCのおかげで、何も考えずにallocとかnewできて
楽になりました。
2017/11/19(日) 11:30:09.61ID:RC6H/PLj
>>1
遅くなったけどスレ立てありがと
遅くなったけどスレ立てありがと
37デフォルトの名無しさん
2017/11/22(水) 03:50:42.17ID:xPTGudok 複数のhファイルで同じ#import~をたくさんかくと何かデメリットがあるのでしょうか?
わかりやすくmで使っているものをそれぞれ全部書くべきか、書かなくてもビルドが通るなら書かない方がいいのかベストは何でしょうか。
わかりやすくmで使っているものをそれぞれ全部書くべきか、書かなくてもビルドが通るなら書かない方がいいのかベストは何でしょうか。
2017/11/22(水) 10:19:35.09ID:r2ZqOIfG
>>37
#include
使ってた人は
重複定義とか循環参照とかでビルドエラーになった経験があるからね
#import
でも#include時と同じように気を付けるってだけ
実際#importは多重インクルードしない機能があるから問題ないけど
ソースが汚れるし参照でエラーが出る事あるしで無闇にimportしない
必要な物だけimportして
親子関係をしっかり考えたコーディングを心がけましょうってこと
#include
使ってた人は
重複定義とか循環参照とかでビルドエラーになった経験があるからね
#import
でも#include時と同じように気を付けるってだけ
実際#importは多重インクルードしない機能があるから問題ないけど
ソースが汚れるし参照でエラーが出る事あるしで無闇にimportしない
必要な物だけimportして
親子関係をしっかり考えたコーディングを心がけましょうってこと
39デフォルトの名無しさん
2017/11/22(水) 15:51:24.96ID:xPTGudok なるべく必要最小限にということですね。
40デフォルトの名無しさん
2017/11/22(水) 15:55:29.92ID:xPTGudok AViewcontrollerを開いたあとに、BViewcontrollerを開くと、Aでimport たファイルはBでしなくてもビルドが通るので書かない方がいいのかなとモヤモヤしてました
2017/11/22(水) 19:21:42.58ID:X4A9CpkS
ヘッダで必要ならヘッダでimport、ソースで必要ならソースでimport
2017/11/23(木) 00:42:23.09ID:OCoBz1Jl
ヘッダにはimportせず
@class
の登場も多い
@class
の登場も多い
43デフォルトの名無しさん
2017/11/25(土) 10:14:21.83ID:QEaE88pM すれ違いだったらすみません。
dudReciveMemoryWarningの活用方法って何かありますでしょうか?
dudReciveMemoryWarningの活用方法って何かありますでしょうか?
2017/11/25(土) 10:47:26.89ID:HXFBSnjY
今必要でなくて再取得/再計算できるものは解放するんや
せやないとクラッシュする
せやないとクラッシュする
45デフォルトの名無しさん
2017/11/25(土) 10:57:22.27ID:QEaE88pM するarcの場合は自動なのでやることはないとうことですか?
または配列にnilを入れたりすることも効果ありますか?
または配列にnilを入れたりすることも効果ありますか?
2017/11/25(土) 14:12:30.26ID:xzKXUh+9
strong変数にnilを代入してメモリを解放
NSArrayは要素をstrongで保持するのでNSArrayごとnilにすれば解放される
ただでかいメモリ食うのは主にビューなんで、表示してない不要なビューは解放するのが効く
つうか、ビューは必要な分を動的に生成が基本だろ
そもそもそのメッセージ飛んできたらユーザーに再起動を促すね俺は
NSArrayは要素をstrongで保持するのでNSArrayごとnilにすれば解放される
ただでかいメモリ食うのは主にビューなんで、表示してない不要なビューは解放するのが効く
つうか、ビューは必要な分を動的に生成が基本だろ
そもそもそのメッセージ飛んできたらユーザーに再起動を促すね俺は
47デフォルトの名無しさん
2017/11/26(日) 03:28:42.31ID:9JZfehuk48デフォルトの名無しさん
2018/01/08(月) 17:55:53.60ID:PDDlr6cN 返り値複数の関数は作れますか?
49デフォルトの名無しさん
2018/01/08(月) 19:39:48.53ID:g3wGVkXu 構造体とかobject(メンバ)を返す
2018/01/10(水) 20:03:11.34ID:BUMGzXZx
cocoa event handling 難しいです。
Windowに置いたAVPlayerViewのjkl キーナビゲーションをカスタマイズ=潰したいです。
別のViewを配置して、NSResponderのkeyEquivalent系メソッドでキーコードのjklなNSEventをぶんどれば良いのでしょうか。
AVPlayerViewは、acceptFirstResponderにYesと返してくるのに、Viewをクリックしてもfirstresponderにならないので悩んでます。
Windowに置いたAVPlayerViewのjkl キーナビゲーションをカスタマイズ=潰したいです。
別のViewを配置して、NSResponderのkeyEquivalent系メソッドでキーコードのjklなNSEventをぶんどれば良いのでしょうか。
AVPlayerViewは、acceptFirstResponderにYesと返してくるのに、Viewをクリックしてもfirstresponderにならないので悩んでます。
2018/01/10(水) 22:15:32.63ID:oP8dWPVt
AVPlayerViewのサブクラスを作って、その(キー)イベントハンドラでやればいいんじゃないの。てかそれが普通で簡単確実じゃないかなあ。もしくはMethod Swizzlingでとか
NSResponder云々はResponder chainを理解してなさげ。奪うとかよりも取りこぼしを拾うような感じで、やりたいような処理機会を奪うのはムズいだろう
NSResponder云々はResponder chainを理解してなさげ。奪うとかよりも取りこぼしを拾うような感じで、やりたいような処理機会を奪うのはムズいだろう
2018/01/13(土) 21:00:50.73ID:r2JNGeyO
もう少し教えて下さい。
event handling guideを読み進めたのですが、keyboard eventの場合には、最初にperformkeyequivalent
がWindow上の全viewに対して一通り呼ばれて、
その後にmenu barのショートカットが評価され、
それでも該当しない場合に初めて
keyDown:をresponder chainへ投げる流れに進む、
と理解したのですが、正しいでしょうか。
この理解ですと、acceptFirstResponder/responder chainが意味を持つのはキーイベント処理のかなり後になるように思えます。
viewが実装しているキーボード処理をoverrideする場合
親クラスがkeydownのみ実装していると仮定するのは
微妙かなと感じたのですが、AppKitではkeyequivalentでは実装しない、そういう前提で書くのが正しいのでしょうか。
event handling guideを読み進めたのですが、keyboard eventの場合には、最初にperformkeyequivalent
がWindow上の全viewに対して一通り呼ばれて、
その後にmenu barのショートカットが評価され、
それでも該当しない場合に初めて
keyDown:をresponder chainへ投げる流れに進む、
と理解したのですが、正しいでしょうか。
この理解ですと、acceptFirstResponder/responder chainが意味を持つのはキーイベント処理のかなり後になるように思えます。
viewが実装しているキーボード処理をoverrideする場合
親クラスがkeydownのみ実装していると仮定するのは
微妙かなと感じたのですが、AppKitではkeyequivalentでは実装しない、そういう前提で書くのが正しいのでしょうか。
2018/01/13(土) 21:39:21.90ID:CuNC/zNj
読んだだけだろ?テストしたらわかるよperformKeyEquivalent:の意味が
2018/02/16(金) 06:10:45.34ID:W1XJdyx1
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
55デフォルトの名無しさん
2018/02/16(金) 11:15:20.63ID:619F/gvV こういう宣伝活動はエセ右翼
56デフォルトの名無しさん
2018/02/25(日) 12:03:36.95ID:v4cEluZE performSelecterで複数の引数を指定するにはどうすればよいですか?
2018/02/25(日) 14:39:30.86ID:JPXzVKnW
performSelector:withObject:withObject:
58デフォルトの名無しさん
2018/02/25(日) 17:21:55.57ID:v4cEluZE ありがとうございます
3つからは配列しかないでしょうか
3つからは配列しかないでしょうか
2018/02/25(日) 19:59:03.61ID:bmk994+o
辞書にキー値で入れて渡せばいくらでも
2018/02/25(日) 23:04:26.61ID:EklcbxjR
ドキュメントのニュアンス的に書いてあるようにperformSelector:は簡易版のようなもので、本来NSInvocationを使うのが筋だと思ってる
まあ、NSInvocationはめんどくさいから普通に>>59のいうやり方にするけど
NSInvocation使ってperformSelector:のオレオレバージョンメソッド追加したりも簡単だけど、それもあんましないな
まあ、NSInvocationはめんどくさいから普通に>>59のいうやり方にするけど
NSInvocation使ってperformSelector:のオレオレバージョンメソッド追加したりも簡単だけど、それもあんましないな
61デフォルトの名無しさん
2018/02/26(月) 01:16:10.13ID:tsC3awB5 他で既にたくさん呼ばれている関数の引数が3つ以上だと使えないですね。
Timerで代替できるけど、ちょっと流れが読みにくくなっちゃうんですよね
Timerで代替できるけど、ちょっと流れが読みにくくなっちゃうんですよね
62デフォルトの名無しさん
2018/02/26(月) 01:19:45.75ID:tsC3awB5 progressviewを読んでも表示されないときに、処理を一旦をOSに返し?表示させるために使ってますが、他の良い方法はありますか?
2018/02/26(月) 01:59:59.33ID:4buxL9WA
流れが読めないなw
2018/02/26(月) 03:20:00.69ID:4buxL9WA
performSelector:withObject:withObject:... の、ただ引数が増えましたバージョンはNSInvocation使って普通にできたな
Timer〜処理を一旦をOSに〜がafterDelay:付きのような気ががするが、そもそもそれは複数引数なんてないしな
afterDelay:付きはcancelPreviousPerformRequestsWithTarget:selector:object:をどう実現すんのかわからんが、それいらんのだったら同じくでできる
Timer〜処理を一旦をOSに〜がafterDelay:付きのような気ががするが、そもそもそれは複数引数なんてないしな
afterDelay:付きはcancelPreviousPerformRequestsWithTarget:selector:object:をどう実現すんのかわからんが、それいらんのだったら同じくでできる
2018/02/26(月) 03:31:09.46ID:MMVJYAud
単に次のrunloop cycleで処理を実行させたいということのような気がするんで
-[NSOpeartionQueue addOperationWithBlock:] でいいんじゃないかな (あれば、だけど)
-[NSOpeartionQueue addOperationWithBlock:] でいいんじゃないかな (あれば、だけど)
66デフォルトの名無しさん
2018/02/26(月) 09:56:36.23ID:tsC3awB5 キャンセルというのがあるんですね!
初めて知りました。
addOperation試してみます。
勉強になりました。
ありがとうございます。
初めて知りました。
addOperation試してみます。
勉強になりました。
ありがとうございます。
2018/03/25(日) 22:05:45.15ID:qhw5X0vA
今日からObjective-Cを勉強し始めた初心者です
OSX/macOS用のデスクトップアプリの製作を目標にしています
ファイル出力で躓いている点がありアドバイス頂けませんでしょうか
NSStringのwriteToURLでテキストファイルを出力したいのですが、Callback関数内で実行すると
EXC_BAD_ACCESSエラーになってしまいます
試しにコピペでCallback関数の外で実行するとエラーになりませんでした。コードはこんな感じです
NSString *hoo = @"test";
[hoo writeToURL: savePanelURL atomically:true encoding:NTUTF8StringEncoding error:nil]
savePanelURLはsavePanelで入力しています
USB機器に1byte送信して、その結果をCallbackで受信したら受信結果をファイルに書き出すのが目的です
ご助言お願いします
OSX/macOS用のデスクトップアプリの製作を目標にしています
ファイル出力で躓いている点がありアドバイス頂けませんでしょうか
NSStringのwriteToURLでテキストファイルを出力したいのですが、Callback関数内で実行すると
EXC_BAD_ACCESSエラーになってしまいます
試しにコピペでCallback関数の外で実行するとエラーになりませんでした。コードはこんな感じです
NSString *hoo = @"test";
[hoo writeToURL: savePanelURL atomically:true encoding:NTUTF8StringEncoding error:nil]
savePanelURLはsavePanelで入力しています
USB機器に1byte送信して、その結果をCallbackで受信したら受信結果をファイルに書き出すのが目的です
ご助言お願いします
2018/03/25(日) 22:14:01.26ID:qhw5X0vA
すみません、上の質問は取り下げとさせて下さい
スレ汚し失礼しました
スレ汚し失礼しました
6967
2018/03/25(日) 22:57:04.08ID:qhw5X0vA 67です。改めて質問させて下さい
savePanelで保存ファイル名を入力したらUSB機器に送信し、Callbackで結果を受信したらそれを
ファイルに出力する、と言う処理を考えています
savePanelから得たURLを直接Callback関数に渡す事は出来ないので一旦publicな変数に
格納していますが、Callback関数がこのNSURLを参照するとEXC_BAD_ACCESS例外に
なってしまいます。Callback関数内でNSLog()でNSURL変数を参照すると例外が発生しました
callback関数が別スレッドで動いているからでしょうか?しかしながら、unsigned charの配列
なんかは問題なく参照出来ています。クラスインスタンスだけだめなんでしょうか。
解決方法についてご助言頂けますと幸いです
savePanelで保存ファイル名を入力したらUSB機器に送信し、Callbackで結果を受信したらそれを
ファイルに出力する、と言う処理を考えています
savePanelから得たURLを直接Callback関数に渡す事は出来ないので一旦publicな変数に
格納していますが、Callback関数がこのNSURLを参照するとEXC_BAD_ACCESS例外に
なってしまいます。Callback関数内でNSLog()でNSURL変数を参照すると例外が発生しました
callback関数が別スレッドで動いているからでしょうか?しかしながら、unsigned charの配列
なんかは問題なく参照出来ています。クラスインスタンスだけだめなんでしょうか。
解決方法についてご助言頂けますと幸いです
2018/03/26(月) 00:32:44.01ID:epnL0PWD
Callbackにデリゲートも持たせる
iokitのUSB関連のコールバックは基本そういう設計になってる
iokitのUSB関連のコールバックは基本そういう設計になってる
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 「1800万円の売り上げゼロに…」中国インバウンドに特化の宿の今 [蚤の市★]
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 [蚤の市★]
- 最新版Z級クソ映画ランキングが決定! [牛丼★]
- クリスマスの「予定なし」54% [少考さん★]
- 日銀0.75%に利上げへ、30年ぶりの水準に 19日金融政策決定会合 [蚤の市★]
- 「中国人の訪日熱は冷めた」 人気旅行先から日本外れる 14日で自粛呼びかけ1カ月 ★2 [蚤の市★]
- 統一教会・田中富広会長、辞任会見で「山上徹也君の起こした(安倍晋三銃撃)事件について背景に家庭連合が存在することは事実」と述べる [377482965]
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪★3
- 【実況】博衣こよりのえちえち機動戦士ガンダム逆襲のシャア🧪★2
- コーヒー、来年3月から30パーセント値上げへ [709039863]
- 茶ぁしばこうや···
- 愛国者「釘を使わない日本独自の伝統工法スゴイ!」X民「それ中国起源ですよ」→批判殺到 [834922174]
