text: //
  // Copyright 2011-2014 NimbusKit
  //
  // Forked from Three20 June 10, 2011 - Copyright 2009-2011 Facebook
  //
  // Licensed under the Apache License, Version 2.0 (the "License");
  // you may not use this file except in compliance with the License.
  // You may obtain a copy of the License at
  //
  //    http://www.apache.org/licenses/LICENSE-2.0
  //
  // Unless required by applicable law or agreed to in writing, software
  // distributed under the License is distributed on an "AS IS" BASIS,
  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  // See the License for the specific language governing permissions and
  // limitations under the License.
  //
  
  #import <Foundation/Foundation.h>
  
  #if defined __cplusplus
  extern "C" {
  #endif
  
  /**
   * For collections that don't retain their objects.
   *
   * @ingroup NimbusCore
   * @defgroup Non-Retaining-Collections Non-Retaining Collections
   * @{
   *
   * Non-retaining collections have historically been used when we needed more than one delegate
   * in an object. However, NSNotificationCenter is a much better solution for n > 1 delegates.
   * Using a non-retaining collection is dangerous, so if you must use one, use it with extreme care.
   * The danger primarily lies in the fact that by all appearances the collection should still
   * operate like a regular collection, so this might lead to a lot of developer error if the
   * developer assumes that the collection does, in fact, retain the object.
   */
  
  /**
   * Creates a mutable array which does not retain references to the objects it contains.
   *
   * Typically used with arrays of delegates.
   */
  NSMutableArray* NICreateNonRetainingMutableArray(void);
  
  /**
   * Creates a mutable dictionary which does not retain references to the values it contains.
   *
   * Typically used with dictionaries of delegates.
   */
  NSMutableDictionary* NICreateNonRetainingMutableDictionary(void);
  
  /**
   * Creates a mutable set which does not retain references to the values it contains.
   *
   * Typically used with sets of delegates.
   */
  NSMutableSet* NICreateNonRetainingMutableSet(void);
  
  #if defined __cplusplus
  };
  #endif
  
  /**@}*/// End of Non-Retaining Collections ////////////////////////////////////////////////////////
  