En observeValueForKeyPath:ofObject:change:context:
, ¿por qué los documentos usan NULL
en lugar de nil
cuando no se especifica un puntero de contexto?NULL vs nil en Objective-C
Respuesta
nil
solo debe usarse en lugar de id
, lo que los programadores Java y C++ consideraríamos como un puntero a un objeto. Use NULL
para punteros que no sean objetos.
consulte la declaración de ese método:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
El contexto es un (es decir, un puntero al estilo C) void *
, así que es definitivamente posible utilizar NULL
(que se declara a veces como (void *)0
) en lugar de nil
(que es del tipo id
).
Pero dado que el tipo de 'context' en' observeValueForKeyPath: ofObject: change: context: 'es' void * ', ¿no significa eso que los datos pasados como' context' podrían ser un puntero de objeto? Yo pensaría que es un caso común. Es por eso que estoy confundido sobre por qué los documentos siempre usan 'NULL' en lugar de' nil'. – erikprice
El tipo de contexto: en ese método es "vacío *". "nil" no es un "vacío *", pero es NULL. –
Entonces, ¿es correcto deducir de esta discusión que * no * podemos pasar un puntero de objeto (es decir, algo que puede escribirse como 'nil') cuando pasamos este mensaje al objeto que implementa NSKeyValueObserving? Porque los punteros a objetos no pueden ser del tipo 'void *'? – erikprice
Técnicamente son lo mismo (0), pero nil se usa generalmente para un tipo de objeto Objective-C, mientras que NULL se usa para punteros c-style (void *).
Son técnicamente lo mismo y sólo se diferencian en el estilo:
- estilo de Objective-C dice
nil
es lo que va a utilizar para el tipoid
(y punteros a objetos). - El estilo C dice que
NULL
es lo que usa paravoid *
. - El estilo de C++ generalmente dice que solo debe usar
0
.
Me suelen utilizar la variante que coincida con el idioma en el que el tipo es declarado .
C++ 11 ahora usa nullptr en lugar de 0 para punteros nulos –
NULL
es el C equivalent
de nil
, un puntero a la nada;
donde nil is zero typed as id
,
NULL is zero typed as void*
.
Un punto importante no se puede enviar un mensaje a NULL. Por lo tanto, se prefiere usar nil en el objetivo C en muchos lugares.
Casi son la misma cosa, excepto,
nil
se utiliza en un estilo de Objective-C. donde NULL
es para punteros tipo C y se tipifica como (void *)
.
¿No es esto más o menos una repetición de [esta respuesta existente] (http://stackoverflow.com/questions/557582/null-vs-nil-in- objetivo-c/557607 # 557607)? – Pang
- 1. Clojure nil vs Java null?
- 2. "error: NULL" o "error: nil"?
- 3. ¿Cuáles son las diferencias entre nil, NULL y [NSNULL nil]?
- 4. iPhone: diferencia entre nil vs Nil y verdadero vs TRUE
- 5. (obj == null) vs (null == obj)?
- 6. versión Vs nil - Best Practice
- 7. ¿Cuál es la diferencia entre [NSNull null] y nil?
- 8. ¿Puedo obtener AFNetworking para analizar automáticamente NULL a nil?
- 9. Objective-C: ¿Cuál es la diferencia entre NULL, nil y @ ""?
- 10. Error NSError *; vs NSError * error = nil;
- 11. Entero MySQL 0 vs NULL
- 12. String.IsNullOrEmpty (myString) Vs myString! = Null
- 13. Bloques ObjectiveC equivalente en Java
- 14. return String vs Integer vs undefined vs null
- 15. nil || falso y falso || nil en ruby
- 16. En ObjectiveC, ¿los punteros son variables de instancia de clase inicializadas a 'nil', o de lo contrario?
- 17. (nil) puntero en C/C++
- 18. time (NULL); vs tiempo (y algo);
- 19. no existe ninguna @null diff Vs # 00000000
- 20. objectivec: fb publicar comentario error
- 21. ObjectiveC Parse Integer from String
- 22. "is not null" vs boolean MySQL - Rendimiento
- 23. ObjectiveC que pasa alrededor ... nula terminado listas de argumentos
- 24. Clojure not nil check
- 25. En Ruby, ¿por qué una igualdad con nil ("Date.new == nil") devuelve nil?
- 26. Form.Release + NIL
- 27. ¿El NSDictionary initWithObjectsAndKeys trata los objetos NULL/Nil y que no sean objetos NSString
- 28. NSInvocación nil argumento
- 29. NSDocumentController currentDocument return nil
- 30. #define NULL NULL
en mi opinión, el objeto es nulo, la clase es Nil y NULL usando para el objeto o clase –