예제 #1
0
 public static CFBundle[]? GetAll()
 {
     // as per apple documentation:
     // CFBundleGetAllBundles
     //
     //  'This function is potentially expensive and not thread-safe'
     //
     // This means, that we should not trust the size of the array, since is a get and
     // might be modified by a diff thread. We are going to clone the array and make sure
     // that Apple does not modify the array while we work with it. That avoids changes
     // in the index or in the bundles returned.
     using (var cfBundles = new CFArray(CFBundleGetAllBundles(), false))
         using (var cfBundlesCopy = cfBundles.Clone()) {
             return(CFArray.ArrayFromHandleFunc <CFBundle> (cfBundlesCopy.Handle, (handle) => new CFBundle(handle, false), false));
         }
 }
예제 #2
0
 public static CFBundle[] GetAll()
 {
     // as per apple documentation:
     // CFBundleGetAllBundles
     //
     //  'This function is potentially expensive and not thread-safe'
     //
     // This means, that we should not trust the size of the array, since is a get and
     // might be modified by a diff thread. We are going to clone the array and make sure
     // that Apple does not modify the array while we work with it. That avoids changes
     // in the index or in the bundles returned.
     using (var cfBundles = new CFArray(CFBundleGetAllBundles()))
         using (var cfBundlesCopy = cfBundles.Clone()) {
             var bundleCount    = cfBundlesCopy.Count;          // the property is a C call, calling everytime we loop is not needed
             var managedBundles = new CFBundle [bundleCount];
             for (int index = 0; index < bundleCount; index++)
             {
                 // follow the get rule, we do not own the object
                 managedBundles [index] = new CFBundle(cfBundlesCopy.GetValue(index), false);
             }
             return(managedBundles);
         }
 }