鴻蒙OS 本地Unowned

2020-10-15 10:07 更新

注釋方法或單個局部變量。

注釋單個局部變量意味著從引用計數(shù)中排除此變量的實例引用。注釋方法意味著撤消該方法對引用對象的所有局部變量(顯式或隱式)的所有權(quán),并從引用對象的引用計數(shù)中排除這些變量的引用。

UnownedLocal 的目的是減少 RC 開銷,而不是消除循環(huán)引用。

對于在多線程模式下不安全的 HashMap.containsValue 方法,不允許其他線程同步修改 HashMap。因此,對 HashMap 中內(nèi)部表和節(jié)點的讀取不包括在引用計數(shù)中,因此不會釋放所引用的對象。在這種情況下,可以使用 UnownedLocal 在方法中注釋對象。

請參考以下示例代碼:

  1. @UnownedLocal
  2. public boolean containsValue(Object value) {
  3. Node<K,V>[] tab;
  4. V v;
  5. if ((tab = table) != null && size > 0) {
  6. for (int i = 0; i < tab.length; ++i) {
  7. for (Node<K,V> e = tab[i]; e != null; e = e.next) {
  8. if ((v = e.value) == value || (value != null && value.equals(v)))
  9. return true;
  10. }
  11. }
  12. }
  13. return false;
  14. }
  15. public boolean containsValue(Object value) {
  16. Node<K,V>[] @Unowned tab;
  17. V @Unowned v;
  18. if ((tab = table) != null && size > 0) {
  19. for (int i = 0; i < tab.length; ++i) {
  20. for (Node<K,V> e = tab[i]; e != null; e = e.next) {
  21. if ((v = e.value) == value || (value != null && value.equals(v)))
  22. return true;
  23. }
  24. }
  25. }
  26. return false;
  27. }
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號