سؤال

أحاول فهم الطريقة التي يعمل بها القوس، وبقدر ما أعرف، يجب أن أفعل شيئا خاطئا هنا.هذا هو الرمز الذي أستخدمه:

واجهة: giveacodicetagpre.

تنفيذ: giveacodicetagpre.

بعد تنفيذ هذا، أحصل على: giveacodicetagpre.

إذا لم أكن مخطئا، فلا أضعف، فلا ينبغي الاحتفاظ بمحتوى الكائن.لذلك، يجب أن تظهر NIL بدلا من "Hello World!".

ماذا أفعل الخطأ؟

بعد إجابة Caleb، لقد قمت بإنشاء مؤشر ضعيف آخر، راجع التعليمات البرمجية أدناه: giveacodicetagpre.

النقطة هي أنني ما زلت حصلت على نفس الإجابة اعتدت أن يكون لديك: giveacodicetagpre.

هل كانت مفيدة؟

المحلول

كما أشار كاليب، باستخدام Nsstring ثابت لهذا المثال ليست فكرة جيدة.

أبسط طريقة لإنشاء كائن سلسلة في التعليمات البرمجية المصدر هي استخدام الهدف - C @ "..." بناء:

nsstring * temp= @ "/ TMP / SCH"؛ لاحظ أنه عند إنشاء سلسلة ثابت في هذه الأزياء، يجب تجنب استخدام أي شيء سوى 7 بت شخصيات ASCII. يتم إنشاء مثل هذا الكائن في وقت الترجمة طوال تنفيذ البرنامج الخاص بك. المحول البرمجي يجعل مثل هذا الكائن الثوابت فريدة من نوعها على أساس لكل وحدة، ولا يتم إلغاؤها أبدا، على الرغم من أنه يمكنك الاحتفاظ بها وإصدارها أثناء قيامك بأي كائن آخر. أنت يمكن أيضا إرسال رسائل مباشرة إلى ثابت سلسلة كما تفعل سلسلة أخرى:

bool نفسه= [@ "المقارنة" isequaltoString: myString]؛

الصفحة الرئيسية وثائق يفسر أن السلاسل المستمرة لن تختفي.

حاول استخدام شيء آخر لتجربةك. جربت NSOBJECT أنتجت النتائج المتوقعة.

واجهة: giveacodicetagpre.

التنفيذ: giveacodicetagpre.

يتم تعيين المؤشرات الضعيفة على nil عندما لا توجد مؤشرات قوية على الذاكرة كما هو موضح في الوثائق - أبل المطور أو LLVM .

__ ضعيف يحدد مرجعا لا يحتفظ بالكائن المشار إليه حيا. يتم تعيين مرجع ضعيف على NIL عندما لا يكون هناك قوي مراجع إلى الكائن.

نصائح أخرى

لذلك، يجب أن تظهر NIL بدلا من "Hello World!".

السلاسل المستمرة لا يتم إلغاء تخصيصها أبدا، لذلك لديك `العالم" @ "!لا يذهب بعيدا.هذا هو السبب في أن مرجعك الضعيف لم يتم تعيينه أبدا إلى NIL.

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