SORU
23 Aralık 2010, PERŞEMBE


'a koymak için en iyi yol c-yapı ne bir NSArray?

NSArray c-yapılar saklamak için her zamanki yolu nedir? Avantajları, dezavantajları, bellek kullanımı?

Özellikle, ne valueWithBytes valueWithPointer -- arasındaki fark justin ve yayın balığı altında büyüttü.

Here's a link gelecek valueWithBytes:objCType: Apple'ın tartışma okuyucular...

Bazı yan ve daha fazla performans bakmayı düşündüğüm için, Evgen STL::vector kullanarak gündeme getirdiC.

(Bu ilginç bir konuyu gündeme getiriyor: orada hızlı bir c kütüphanesi, az veren STL::vector ama çok hafif değil, aksine "diziler düzenli kullanım" ...?)

Asıl soruya

Örneğin:

typedef struct _Megapoint {
    float   w,x,y,z;
} Megapoint;

Yani: ne NSArray ve nasıl deyim bellek ne yapmalıyım? bir böyle kendi yapısını depolamak için normal, iyi, mecaz yolu bu

Lütfen özellikle her zamanki deyim için yapılar depolamak için sabırsızlanıyorum unutmayın. Tabii ki, yeni bir sınıf yaparak sorunu önlemek olabilir. Ancak aslında yapılar koymak için her zamanki deyim bir dizi, teşekkürler nasıl bilmek istiyorum.

İşte belki de bu yüzden bilimsel deneyler bazen büyük yaklaşımın bu ARADA? en iyi değil

Megapoint p;
NSArray *a = [NSArray arrayWithObjects:
    [NSData dataWithBytes:&p length:sizeof(Megapoint)],
    [NSData dataWithBytes:&p length:sizeof(Megapoint)],
    [NSData dataWithBytes:&p length:sizeof(Megapoint)],
        nil];

Bir referans noktası ve CGPoints depolamak için ve NSArray: benzer Hardie Jarret sayesinde BTW

NSArray *points = [NSArray arrayWithObjects:
        [NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
        [NSValue valueWithCGPoint:CGPointMake(6.9, 6.9)],
        nil];

(How can I add CGPoint objects to an NSArray the easy way?)

CEVAP
23 Aralık 2010, PERŞEMBE


NSValue sadece CoreGraphics yapılar – kendi kullandığım çok desteklemiyor. Sınıf muhtemelen basit veri yapıları NSData daha hafif olduğu için bunu yapmak tavsiye ederim.

Sadece aşağıdaki gibi bir ifade kullanın

[NSValue valueWithBytes:&p objCType:@encode(Megapoint)];

Ve değeri geri almak için:

Megapoint p;
[value getValue:&p];

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • dhcrr's channel

    dhcrr's chan

    2 Ocak 2007
  • Hak5

    Hak5

    7 EYLÜL 2005
  • LG Mobile Global

    LG Mobile Gl

    2 EYLÜL 2010