W observeValueForKeyPath:ofObject:change:context:
- dlaczego dokumenty używają NULL
zamiast nil
, gdy nie określa się wskaźnika kontekstowego?NULL vs zero w Objective-C
Odpowiedz
nil
powinien być używany tylko w miejsce id
, co my, programiści Java i C++, uważalibyśmy za wskaźnik do obiektu. Użyj NULL
dla wskaźników nieobiektowych.
Look w deklaracji tej metody:
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object
change:(NSDictionary *)change context:(void *)context
Kontekst jest void *
(czyli wskaźnik C-style), więc na pewno chcesz używać NULL
(co jest czasami zadeklarowane jako (void *)0
) zamiast nil
(który jest typu id
).
Ale ponieważ typ 'context' w' observeValueForKeyPath: ofObject: change: context: 'to' void * ', czy to nie oznacza, że dane przekazane jako' context' mogą być wskaźnikami obiektów? Sądzę, że jest to powszechny przypadek. Właśnie dlatego jestem zdezorientowany, dlaczego docs zawsze używają 'NULL' zamiast' nil'. – erikprice
Rodzaj kontekstu: w tej metodzie jest "void *". "zero" nie jest "void *", ale NULL jest. –
Czy można zatem wywnioskować z tej dyskusji, że * nie możemy * przekazać wskaźnika obiektu (aka, coś, co można wpisać jako 'nil'), gdy przekazujemy tę wiadomość do obiektu implementującego NSKeyValueObserving? Ponieważ wskaźniki obiektów nie mogą być typu "void *"? – erikprice
Są technicznie to samo (0), ale zero jest zwykle używane dla obiektu typu Objective-C, a NULL dla wskaźników w stylu C (void *).
Ponadto, 'NULL' jest inaczej zdefiniowany niż' zero'. 'nil' jest zdefiniowane jako' (id) 0'. 'NULL' nie jest. –
@WTP, jeśli czytasz przez MacTypes.h, deklaruje #define zero NULL – jbat100
To jest bardzo interesujące. Wygląda na to, że nie ma to większego znaczenia niż punkty styli. To jest jak TAK/PRAWDA i NIE/FAŁSZ. – Brennan
Są technicznie to samo i różnią się jedynie w stylu:
- Objective-C styl mówi
nil
co użyć doid
typu (i wskaźniki do obiektów). - Styl C mówi, że
NULL
jest tym, czego używasz dlavoid *
. - Styl C++ zazwyczaj mówi, że powinieneś po prostu użyć
0
.
Zazwyczaj używam wariantu, który odpowiada językowi, w którym typ jest zadeklarowany jako.
C++ 11 teraz używa nullptr zamiast 0 dla wskaźników zerowych –
NULL
jest C equivalent
z nil
, wskaźnik do niczego;
gdzie nil is zero typed as id
,
NULL is zero typed as void*
.
Jeden ważny punkt nie można wysłać wiadomość do NULL. Dlatego w wielu miejscach preferowane jest używanie zer w celu-C.
one prawie to samo z wyjątkiem
nil
stosowany jest w stylu Objective-C. , gdzie NULL
jest dla wskaźników typu C i jest wpisany jako (void *)
.
Czy to nie jest powtórka z [tej istniejącej odpowiedzi] (http://stackoverflow.com/questions/557582/null-vs-nil-in- cel-c/557607 # 557607)? – Pang
- 1. Clojure zero vs Java null?
- 2. "błąd: NULL" lub "error: zero"?
- 3. LocationClient getLastLocation() zwraca zero null
- 4. tablice zero length vs. wskaźniki
- 5. W ObjectiveC są to wskaźniki będące instancyjnymi zmiennymi instancji inicjowanymi jako "zero" lub w inny sposób?
- 6. Wdrożenie ObjectiveC protokół w szybkim
- 7. Otrzymuj AVG ignorując wartości Null lub Zero
- 8. C# HasValue vs! = Null
- 9. jQuery: array zero vs function get zero: [0] vs get (0)
- 10. IS NULL vs = NULL w przypadku gdy klauzula + SQL Server
- 11. Moduł Operator vs zero (re: Source arc4random_uniform)
- 12. ObjectiveC Parse Integer from String
- 13. JavaScript: w porównaniu do wartości null -! == vs! =
- 14. Traktowanie zero jako zero w sumie funkcji
- 15. zero || false i false || zero w Ruby
- 16. ObjectiveC: gdzie zadeklarować prywatne właściwości instancji?
- 17. Jak korzystać arrayWithContentsOfFile załadować plik z powodzeniem napisane z WriteToFile w ObjectiveC/XCode
- 18. Najlepszy sposób na przydzielenie macierzy w R, NULL vs NA?
- 19. Zagraj w Scala Json Missing Property vs Null
- 20. Składnia ObjectiveC do określania nazwy protokołu w argumencie Metoda Argumenty
- 21. Czy czas wywołania metody super klasy jest ważny w ObjectiveC?
- 22. Argument ma długość zero
- 23. Kiedy Registry.CreateSubKey zwraca zero?
- 24. Jak wyciąć na zero?
- 25. Czy minus zero (-0) odpowiada zero (0) w C#
- 26. Jak przekonwertować NSNull na zero w Swift?
- 27. WPF ActualWidth wynosi zero
- 28. UnitTest JSONObject pokazuje zero
- 29. NULL == wskaźnik
- 30. getAllCellInfo zwraca zero w systemie Android 4.2.1
moim zdaniem obiekt jest zerowy, klasa jest zerowa i NULL jest używana dla obiektu lub klasy –