Saya menggunakan NSUSerDefaults untuk menyimpan preferensi pengguna. Saya ingat pernah membaca bahwa menyetel kunci sebagai konstanta adalah ide yang bagus - dan saya setuju. Kode berikut adalah yang saya miliki saat ini:
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:@"polygonNumberOfSides"];
Saya mencoba mengubah ini menjadi:
@implementation Controller
NSString const *kPolygonNumberOfSides = @"polygonNumberOfSides";
-(void)savePolygonInfo {
[[NSUserDefaults standardUserDefaults]
setObject:[NSNumber numberWithInt:polygon.numberOfSides]
forKey:kPolygonNumberOfSides];
}
Meskipun ini berhasil, ini menghasilkan " warning: passing argument 1 of 'objectForKey:' discards qualifiers from pointer target type
". Saya ingin menjaga kode saya bebas dari peringatan kompiler. Bagaimana cara memperbaiki peringatan ini?
NSString * const foo
berfungsi karenaNSString
tidak dapat diubah dan penunjuk tidak dapat diubah sehingga tidak pernah dapat diubah, benar? Juga, saya ingat dari C ++ yangconst
secara implisitstatic
(pengoptimalan kompiler) jadi tidak perlu memanggilnya. Apakah itu benar juga di sini?Jangan gunakan
const
dengan objek Objective-C, mereka tidak benar-benar dirancang untuk menggunakannya.NSString
objek (di antara banyak lainnya) sudah tidak dapat diubah secara default berdasarkan desainnya, jadi membuatnyaconst
tidak berguna.Seperti yang disarankan e.James , Anda dapat menggunakan an
NSString * const
, yang merupakan penunjuk konstan ke fileNSString
. Ini sedikit berbeda dari aconst NSString *
(setara denganNSString const *
), yang merupakan penunjuk ke sebuah konstantaNSString
. Menggunakan aNSString * const
mencegah Anda menetapkan ulangkPoly
untuk menunjuk keNSString
objek baru .sumber
const
juga berarti Anda tidak dapat menetapkan ulang. Saya kira saya salah.Untuk akses dari kelas lain:
.h
extern NSString * const PolygonNumberOfSidesPrefsKey;
.m
NSString * const PolygonNumberOfSidesPrefsKey = @"PolygonNumberOfSides"
Untuk akses hanya di dalam kelas saat ini:
.m
static NSString * const kPolygonNumberOfSidesPrefsKey = @"PolygonNumberOfSides"
sumber
Saya akan menyarankan bahkan membuat konstanta lebih deskriptif. Konstanta untuk jumlah sisi poligon bisa berasal dari mana saja. Sebagai saran, bagaimana dengan:
sebagai gantinya.
sumber