2011-07-15 20 views
34

In Cocoa do you prefer NSInteger or just regular int, and why? adresinde, NSDouble ve NSFloat'dan bahsedilmiştir, ancak herhangi bir belgede olanlar için bir başvuru göremiyorum. NSInteger'un amacı, mimari güvenlik içinse, double veya float gibi diğer türlere ne dersiniz? türünün 32 bit ve 64 bit sistemler arasında boyutta olması nedeniyleNSDouble, NSFloat veya NSInteger dışındaki başka türler var mı?

+1

OP'nin ne hakkında konuştuğundan emin değilim. Bunlar mevcut değil. – BoltClock

+0

Çift ve şamandıralı mimari kasa mı? Ben çifte kullanabilirim, ama int geldiğinde NSInteger'i kullanmak zorundayım, aynen böyle mi? – sarunw

+3

Sanırım * NSFloat *, * NSDouble * var. Ancak, CGFloat'ın var olduğunu biliyorum (Sorunun bağlamı dışında.) – EmptyStack

cevap

79

NSInteger bulunmaktadır. float ve double aynı boyutta değildir, bu nedenle bunlar için sarmalayıcı türlerine gerek yoktur.

+0

NSArray'a iki kat eklemek istersek ne yapmalıyım? Sadece nesneleri kabul eder. –

+6

Bir NSNumber nesnesine (daha genel NSValue'nin bir alt sınıfı olan) sarın. – duskwuff

+11

Eh, 32bit 'float' için' typedef' ve 64bit'de 'double' için' 'CGFloat'' vardır. “NS (U) Integer” ile yapılanlara oldukça eşit olanı söyleyebilirim. – Regexident

5

hiçbir NSFloat yoktur ama bazı mimari için double kullanabilir böylece sonunda CGFloat için float değiştirildi Çekirdek Grafik API biliyorum.

Bu, API başlıklarının bildirdiği kesin türleri kullanmak en iyisidir. Bu, kodunuzu farklı bir hedef için yeniden derlerseniz otomatik olarak değişir.

0

Ayrıca konvansiyonlarla ilgilidir.

Bir int için bir yazım denetimi int int kendisiyle uyumlu değil.

Örnek: pid_t, int türünde bir int geçirir, ancak bir int geçirerek uyarı oluşturur.

Neden? Çünkü API sınırlarını aşarsanız herkesin kodun ne beklediğini bildiğinden emin olmalısınız.

Kayan nokta ve çift türleri vardır, yani NSTimeInterval. Temelde yatan tiple ilgili değil, ama uyulması gereken konvansiyon.

Yerel bir int döngü sayacı olarak bildirirseniz ve bunu iyi tanımlanmış bir API'ye aktarmayı planlamıyorsanız, bir int int çağrısında bulunmak iyidir.

İlgili konular