ブロック内部から[self methodName]を呼び出す?
2023-10-01 17:02:20
質問
私はちょうどブロックに遭遇しました、そして、それは私が探しているものだと思います、1つのことを除いて:ブロック内からメソッド[self methodName]を呼び出すことは可能ですか?
これは私がやろうとしていることです。
-(void)someFunction{
Fader* fader = [[Fader alloc]init];
void (^tempFunction)(void) = ^ {
[self changeWindow:game];
//changeWindow function is located in superclass
};
[fader setFunction:tempFunction];
}
数日前から検索しているのですが、これが可能だという根拠が見当たりません。
それとも、ブロックを本来の目的とは違うことに使おうとしているのでしょうか?
ブロックを使っている理由は、Faderクラスを作成し、フェードアウトが終了したときに実行するためのブロックを保存したいからです。
ありがとうございます。
EDITです。 さて、提案を追加しましたが、まだ EXC_BAD_ACCESS エラーが出ます...。
-(void)someFunction{
Fader* fader = [[Fader alloc]init];
__block MyScreen* me = self;
void (^tempFunction)(void) = ^ {
[me changeWindow:game];
//changeWindow function is located in superclass
};
[fader setFunction:tempFunction];
[fader release];
}
多分、私は フェーダー に機能を持たせてはいけないのかも...?
どのように解決するのですか?
はい、できます。
ただし、このブロックでは
self
. もし、このブロックをivarに格納することになれば
簡単に
保持サイクルを作成することができ、どちらも決して割り当て解除されないことになります。
これを回避するには、次のようにします。
- (void) someMethodWithAParameter:(id)aParameter {
__block MySelfType *blocksafeSelf = self;
void (^tempFunction)(void) = ^ {
[blocksafeSelf changeWindow:game];
};
[self doSomethingWithBlock:tempFunction];
}
は
__block
キーワードは、参照されたオブジェクトが保持されないことを (とりわけ) 意味します。
関連
-
[解決済み] 自分」という言葉は何のためにあるのか?
-
[解決済み] SwiftからObjective-Cのコードを呼び出すにはどうしたらいいですか?
-
[解決済み] ブロック内の変数をブロック外の変数に代入する
-
[解決済み】ブロック宣言の構文リスト
-
[解決済み] Objective-Cです。カテゴリ内のプロパティ/インスタンス変数
-
[解決済み] iOSの合成されたプロパティの名前を、先頭のアンダースコアで変更するのはなぜですか?重複
-
[解決済み] このgdbの出力は何を意味しているのでしょうか?
-
[解決済み] iOSアプリ:通知を消去するには?
-
[解決済み] NSSetからNSMutableArrayを返す方法
-
[解決済み] IOS: 角の丸いUIImageまたはUIImageViewを作成する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] NSPredicate: NSDateプロパティの日によるオブジェクトのフィルタリング
-
[解決済み] ARCを使用する場合、deallocでプロパティをnilに設定するのですか?
-
[解決済み] NSLog オーバーライドされた記述方法でのオブジェクトのメモリアドレスの記録
-
[解決済み] メソッドが存在するかどうかをチェックする
-
[解決済み] UIButtonsの背景色を変更することはできますか?
-
[解決済み] IOS: 角の丸いUIImageまたはUIImageViewを作成する
-
[解決済み] Xcodeの "unused variable "の警告を消すにはどうしたらいいですか?
-
[解決済み] iOSアプリケーションの最上位ビュー/ウィンドウへの参照取得
-
[解決済み] objective-cのクラスインスタンスを名前で作成する?
-
[解決済み] Objective-CのクラスからSwiftの関数を呼び出す