==পয়েন্টার তুলনা করার কারণে কাজ করার কারণ। আপনি যখন কোনও ধ্রুবক NSStringব্যবহারের সংজ্ঞা দেন @"", সংকলকটি রেফারেন্সটিকে আলাদা করে দেয়। যখন আপনার কোডে অন্য স্থানে একই ধ্রুবকগুলি সংজ্ঞায়িত করা হয়, তখন তারা সকলেই মেমরির একই প্রকৃত অবস্থানের দিকে নির্দেশ করবে।
NSStringউদাহরণগুলির সাথে তুলনা করার সময় , আপনাকে এই isEqualToString:পদ্ধতিটি ব্যবহার করা উচিত :
NSString *myString1 = @"foo";
NSString *myString2 = @"foo";
NSString *myString3 = [[NSString alloc] initWithString:@"foo"];
NSLog(@"%d", (myString2 == myString3))
NSLog(@"%d", (myString1 == myString2));
NSLog(@"%d", [myString1 isEqualToString:myString2]);
NSLog(@"%d", [myString1 isEqualToString:myString3]);
[myString3 release];
সম্পাদনা করুন:
NSString *myString3 = [[NSString alloc] initWithString:@"foo"];
// this is same with @"foo"
initWithString:আর কোনও নতুন রেফারেন্স তৈরি করে না, আপনার প্রয়োজন হবে initWithFormat,
NSString *myString3 = [[NSString alloc] initWithFormat:@"foo"];
myString3ধ্রুবক একটি পয়েন্টার তৈরি করবে"foo", তাই সাধারণত, এই তিনটি পরিবর্তনশীল একই মেমরি অবস্থান নির্দেশ করবে। এটি জিসিসি এবং ঝনঝন উভয়ের জন্যই সত্য (ডিফল্ট বিকল্প সহ)। এটি সংকলনের চেষ্টা করুন: gist.github.com/578568