このメソッドを参照してください: beginAnimations:context: これはクラス UIView のメソッドです。コンテキストには、void-pointer のタイプであるパラメーターが必要であり、UIImageView をコンテキストに送信する必要があります。ARC を使用すると、void* が禁止されているという警告が表示されます。では、ARCを使用しない以外にUIImageViewをコンテキストに送信するにはどうすればよいですか。
質問する
363 次
1 に答える
0
上記のコメントは、この特定のケース (ブロックベースのアニメーション メソッドを使用) に対する正しい答えを提供しますが、一般に、コンテキストvoid *
を受け取る API があり、オブジェクトを渡したい場合は、に変換するのが最善だと思いますid
。 aCFTypeRef
ポインタで手動のメモリ管理セマンティクスを取得できます(CFTypeRef
は の typedef ですvoid *
)など。ただし、オブジェクトを解放するにはコールバックを呼び出す必要があることに注意してください(つまり、ARCの組み込み管理に変換されます)。 .
以下は、私が思いついた架空の API の例です。
- (void) doSomethingWithObject: (id) object {
// use CFBridgingRetain() to turn object into a manually-retained CFTypeRef/void*
[someObject performBackgroundTaskWithTarget: self
selector: @selector(bgTask:)
context: CFBridgingRetain(object)];
}
- (void) bgTask: (void *) context
{
// use CFBridgingRelease() to turn our void*/CFTypeRef into an ARC-managed id
id object = CFBridgingRelease((CFTypeRef)context);
...
}
于 2012-07-07T17:27:35.250 に答える