Probablemente la razón por la que no existe dicho método en NSArray es que la semántica no está bien definida. Para su caso, con un NSNumber inmutable, entonces todas las semánticas diferentes son equivalentes, pero imagine si el objeto que estaba agregando era un objeto mutable, como NSMutableString, por ejemplo.
Hay tres diferentes: la semántica
retienen - Terminarías con diez punteros a la misma cadena mutable, y el cambio de cualquiera tendría que cambiar los diez.
copia - Terminarías con diez punteros a la misma cadena inmutable, o posiblemente diez diferentes punteros a immeduable cadenas con el mismo valor, pero de cualquier manera no sería capaz de cambiar cualquiera de ellas .
mutableCopy - Terminas con diez objetos de cadena mutables diferentes, cualquiera de los cuales puedes cambiar de forma independiente.
Así que Apple podría escribir tres variantes del procedimiento, o tener algún tipo de parámetro para controlar la semántica, ambos de los cuales son feos, así que en vez de que lo dejó a usted para escribir el código. Si lo desea, puede agregarlo como un método de categoría NSArray, solo asegúrese de comprender las opciones semánticas y dejarlo en claro.
El método:
-(id)initWithArray:(NSArray *)array copyItems:(BOOL)flag
tiene esta misma edición.
Solución de Quinn que usa arrayWithObjects: count: es razonablemente buena, probablemente lo mejor que se puede obtener para el caso general. Póngalo en una categoría NSArray y eso es casi tan bueno como lo que va a obtener.
Para obtener una copia inmutable, solo use -copy, que devuelve una matriz con retención de conteo 1 (y no se libera automáticamente). –
En realidad, -copy devuelve una matriz inmutable que usted posee y debe liberar/liberar automáticamente - el conteo de retención podría ser cualquier cosa dependiendo de cuántas matrices idénticas haya. Lo mejor es nunca hablar de retener los conteos. –
Una excelente distinción: estoy corregido. En general, una copia devuelve un objeto recién inicializado que usted solo posee, pero la semántica en una situación específica puede dictar lo contrario. Si bien el recuento de retención suele ser 1, * podría * ser mayor, y otra persona * podría * haberlo liberado automáticamente. Por lo tanto, tiene razón en que lo mejor es solo preocuparse por equilibrar las propias llamadas para retener/liberar/liberar automáticamente. –