سؤال

ورمز أدناه بتجميع ويدير، ولكن وفقا لجميع الكتب التنمية فون والوثائق ابل انها سوفت! يمكن للشخص الرجاء شرح لي كيف تأتي ثابت NSString يسمح لتغيير قيمها بعد أن تم تعيينها؟ ظننت أنني قد لاستخدام NSMuttableString لتغيير سياق متغير سلسلة نفسه؟ أنا باستخدام SDK 3.1.

NSString *test =[[NSString alloc] initWithString:@"TEST"];
[test release];
test = @"TEST2";
هل كانت مفيدة؟

المحلول

ولعل المثال التالي إضافة على ردود من الأقسام ونيلز وتساعد على توضيح الأمور.

وسلاسل ثابتة

// Setup two variables to point to the same string
NSString * str1 = @"Hello World";
NSString * str2 = str1;

// "Replace" the second string
str2 = @"Hello ikilimnik";

// And list their current values
NSLog(@"str1 = %@, str2 = %@", str1, str2);

وسلاسل قابلة للتغيير

// Setup two variables to point to the same string
NSMutableString * str1 = [NSMutableString stringWithString:@"Hello World"];
NSMutableString * str2 = str1;

// "Replace" the second string
[str2 setString:@"Hello ikilimnik"];

// And list their current values
NSLog(@"str1 = %@, str2 = %@", str1, str2);

ملاحظة عند استخدام فئة NSString ثابتة أن الطريقة الوحيدة ل"تحل محل" سلسلة هو خلق سلسلة جديدة وتحديث بك متغير "str2" للإشارة إلى ذلك. ولكن هذا لا يؤثر ما "str1" يشير إلى، لذلك فإنه لا يزال مرجع السلسلة الأصلية.

في المثال NSMutableString، فإننا لا إنشاء السلسلة الثانية، ولكن بدلا من ذلك تغيير (يتحور) محتويات السلسلة "مرحبا العالم" الحالية. لأن كلا من المتغيرات لا تزال تشير إلى كائن سلسلة نفسه، على حد سواء الإبلاغ عن القيمة الجديدة في استدعاء NSLog.

من المهم أن نفرق بين متغير مؤشر والكائن الفعلي يشير إلى. كائن NSString غير قابل للتغيير، ولكن هذا لا يمنعك من تغيير قيمة المتغير الذي يشير إلى سلسلة.

ونوع البيانات "NSString *" هو مؤشر إلى كائن NSString، وليس هدف في حد ذاته. إذا قمت بتعيين نقطة فاصل في أي من البيانات NSLog ضمن المصحح كسكودي، قد ترغب في التحقق من قيمة الخام من كل متغير لتوضيح ذلك.

نصائح أخرى

وأنت لم يتحور السلسلة، كنت مجرد إعادة توزيع اختبار المتغير للإشارة إلى سلسلة مختلفة. لم يتم تعديل سلسلة الأصلي.

واختبار وTEST2 وأشارت سلسلتين مختلفة لمن قبل * اختبار المؤشر.

وأنت لم تغيير محتويات الكائن NSString المخصصة صراحة من السطر الأول من التعليمات البرمجية ولكن لافتا * اختبار لكائن آخر.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top