Skip to content

replace All Native Release Methods to AnyObject.Release#83

Merged
teach310 merged 4 commits intodevelopfrom
feature/any_object_release
Nov 17, 2023
Merged

replace All Native Release Methods to AnyObject.Release#83
teach310 merged 4 commits intodevelopfrom
feature/any_object_release

Conversation

@teach310
Copy link
Copy Markdown
Owner

Description

各型ごとに release メソッドを用意していたが、型指定しなくても解放できたため、すべての release メソッドを置き換えた。

方法

Unmanaged の型に AnyObject を指定することで全てのクラスを対象にできた。
https://developer.apple.com/documentation/swift/unmanaged
https://developer.apple.com/documentation/swift/anyobject

Test

以下のテストをローカルでswift testで実行して参照カウントが減ることを確認した。

 final class CoreBluetoothForUnityTests: XCTestCase {
     // 参照カウントを正しく減らすことができるか
     func testRefCount() throws {
         let srcObject = CB4UCentralManager()
         XCTAssertEqual(CFGetRetainCount(srcObject), 3) // 初期値は3
         // 参照カウントを増やす
         let unmanagedInstance = Unmanaged.passRetained(srcObject).toOpaque()
         XCTAssertEqual(CFGetRetainCount(srcObject), 4)
         _ = Unmanaged.passRetained(srcObject)
         XCTAssertEqual(CFGetRetainCount(srcObject), 5)
         // 参照カウントを減らす
         Unmanaged<CB4UCentralManager>.fromOpaque(unmanagedInstance).release()
         XCTAssertEqual(CFGetRetainCount(srcObject), 4)
         Unmanaged<AnyObject>.fromOpaque(unmanagedInstance).release()
         XCTAssertEqual(CFGetRetainCount(srcObject), 3)
     }
 }

teach310 added 4 commits November 17, 2023 21:11
NSObject Release だと、NSObject しかリリースできないが、AnyObjectならswiftクラスもリリースできるはずなため。

https://developer.apple.com/documentation/swift/unmanaged
全部これでできるため。
any_object_release以外全て削除
@teach310 teach310 merged commit de4423c into develop Nov 17, 2023
@teach310 teach310 deleted the feature/any_object_release branch November 17, 2023 12:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant