鴻蒙OS 本地Unowned

2020-10-15 10:07 更新

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

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

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

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

請參考以下示例代碼:

   @UnownedLocal
   public boolean containsValue(Object value) {
       Node<K,V>[] tab;
       V v;
       if ((tab = table) != null && size > 0) {
           for (int i = 0; i < tab.length; ++i) {
               for (Node<K,V> e = tab[i]; e != null; e = e.next) {
                   if ((v = e.value) == value || (value != null && value.equals(v)))
                   return true;
               }
           }
       }
       return false;
   }

 
   public boolean containsValue(Object value) {
       Node<K,V>[] @Unowned tab;
       V @Unowned v;
       if ((tab = table) != null && size > 0) {
           for (int i = 0; i < tab.length; ++i) {
               for (Node<K,V> e = tab[i]; e != null; e = e.next) {
                   if ((v = e.value) == value || (value != null && value.equals(v)))
                       return true;
               }
           }
       }
       return false;
   }

 
以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號