1

このメソッドを参照してください: beginAnimations:context: これはクラス UIView のメソッドです。コンテキストには、void-pointer のタイプであるパラメーターが必要であり、UIImageView をコンテキストに送信する必要があります。ARC を使用すると、void* が禁止されているという警告が表示されます。では、ARCを使用しない以外にUIImageViewをコンテキストに送信するにはどうすればよいですか。

4

1 に答える 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 に答える