2015-10-13 24 views
14

Aşağıdaki json üzerinde NSJSONSerialization yürütme, bazen NSCFString * ve bazen NSTaggedPointerString * dize değerleri verir. Bunun neden böyle olduğunu ve NSJSONSerialization'ın hangi tür döndürdüğünü belirlemek için ne yaptığını bilen var mı?NSJSONSerialization üreten NSCFString * ve NSTaggedPointerString *

jsonData = [NSJSONSerialization JSONObjectWithData:data 
                options:kNilOptions 
                error:&parseError]; 

    { 
     "UserPermissionsService": { 
     "ServiceHeader": {}, 
     "UserApplicationPermissions": { 
      "ApplicationPermissions": { 
      "ApplicationID": "TEST", 
      "Permission": [ 
       { 
       "Locations": [ 
        "00000" 
       ], 
       "PermissionID": "LOGIN" 
       }, 
       { 
       "Locations": [ 
        "00000" 
       ], 
       "PermissionID": "SALES_REPORT_VIEW" 
       } 
      ] 
      } 
     } 
     } 
    } 

"GİRİŞ" * Bir NSTaggedPointerString olarak geri gelir. "SALES_REPORT_VIEW" geri geliyor bir NSCFString *. Bu, değerleri kullanıp döküm yaptığım yerde bir etki yapıyor.

GÜNCELLEME

İşte

öğrendiğim budur ...

"tüm değer herhangi bir veri tahsis etmeden pointer kendisinde tutulabilir zaman NSTaggedPointerString sonuçlanır." Veri kullanıldıkça burada detaylı bir açıklaması var

... NSTaggedPointerString yana

https://www.mikeash.com/pyblog/friday-qa-2015-07-31-tagged-pointer-strings.html

tırnak gösteren NSString bir alt sınıfıdır/değil gösteren tırnak benim için bir sorun olmamıştı gerekir.

Yorum yapan herkese teşekkürler. Rahatım, NSJSONSerialization'un ne yaptığını anlıyorum.

+1

itibariyle sınıf kümelerin listesini dampingli meraklı iseniz? Her zaman bir NSString * alırsınız. NSString * 'in hangi alt kategorisi sizin için önemli değil. NSTaggedPointerString için Google – gnasher729

+2

. Eğer bu sizin için bir fark yaratıyorsa, o zaman çok yanlış bir şey yapıyorsunuz demektir. Etiketli işaretçiler, tüm değerlerin herhangi bir veri tahsis edilmeden işaretçinin kendisinde saklanabileceği küçük değerler için 64 bit sistemlerde çok yaygındır. – gnasher729

+0

Bunun bir örneği, UI'de (bir UITextField'e yazıldığında) gösterildiği zaman, NSTaggedPointerString * öğesinin etrafında tırnak işareti yoktur, bu sırada NSString * etrafında tırnak işaretleri bulunur. –

cevap

0

Vakfın çoğu, class clusters olarak uygulanmaktadır. TL; DR ile bir NSString olarak etkileşime giriyorsunuz ancak temel, gerçek içeriklere göre belirli performans veya alan karakteristikleri için optimize etmek için destek uygulamasını değiştirecek.

Eğer Vakfı takımlarından biri bunu bir fark yarattığını ne yapıyorsun iOS 11 here