سؤال

ولدي اختبار صغير أداة الأساس (الهدف-C) أن ألعب مع ولدي بعض الأسئلة ...

#import <Foundation/Foundation.h>

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    int planetLoop;
    NSString *tempString;
    NSMutableArray *planetArray = [[NSMutableArray alloc] init];

    NSLog(@"STRING ARRAY ... Start");
    for(planetLoop=0; planetLoop<10; planetLoop++) {
        tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
        NSLog(@"Planet_%03d", planetLoop+1);
        [planetArray addObject:tempString];
    }

    [planetArray release];
    [pool drain];
    return 0;
}

والأولى، وعادة ما تفرج كائن بعد إضافته إلى مجموعة، ولكن أنا على حق في التفكير في أن ما لدي حاليا هو حق لأن "tempString" هي سلسلة حرفية، وعلى هذا النحو لا تحتاج إلى تخصيص أو الإفراج عنهم

وثانيا، عند تشغيل هذا (قبل التنفيذ) أحصل على eror التالية "غير قادر على قراءة أمر غير معروف تحميل 0x80000022" إذا كان هذا مشكلة مع قانون بلدي؟ من البحث على جوجل يبدو أنه قد يكون خطأ في كسكودي 3.1.2، أي شخص يحصل على أي أفكار؟

وأخيرا أي شيء أقوم به خطأ، والفكرة هي لملء صفيف مع 10 السلسلة "Planet_001" من خلال "Planet_010"

وتحرير: آه، أرى، أن يكون بسبب "= [NSString" أي بمعنى قليلا

// Autoreleased object
tempString = [NSString stringWithFormat: @"Planet_%03d", planetLoop+1];
// String literal
tempString = @"Planet_"; 

وشكرا جزيلا، محل تقدير كبير -gary -

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

المحلول

وtempString ليست في الواقع سلسلة حرفية. @"Planet_%03d" <م> هو سلسلة حرفية. tempString هو كائن autoreleased، وهذا يعني أنه سيتم الإفراج عنه عندما ينضب NSAutoreleasePool. في الأساس، وذاكرة وبالفعل نجح وكنت لا تملك ان تفعل شيئا.

والقاعدة هي: إذا كنت <م> new ، <م> alloc ، <م> copy أو <م> retain كائن، ثم لديك ل<م> release ذلك. وإلا، تتم إدارة الذاكرة بالفعل، وربما من قبل autorelease.

<الإضراب> أيضا، كنت قد نسيت للافراج عن pool. بخلاف ذلك، يبدو على ما يرام.

نصائح أخرى

وأحد الأسباب المحتملة ل"غير قادر على قراءة غير معروف تحميل 0x80000022 قيادة" خطأ على ما يبدو أنني قد ورفع مستواها لسنو ليوبارد دون ترقية أدوات المطورين في نفس الوقت. يبدو قد يكون سبب الخطأ بمحاولة استخدام الإصدار 10.5 لكسكودي أن يجمع في بيئة 10.6. وسوف ننظر في هذا غدا.

وكسكودي 3.2 متوفر الآن في الافراج سنو ليوبارد (ماك OS X 10.6). بعد تثبيت سنو ليوبارد، الترقية إلى كسكودي 3.2 عن طريق تثبيت بشكل منفصل من صورة القرص أدوات كسكودي. يمكنك تثبيته على الإصدارات السابقة من كسكودي، أو نقل جانبا منها قبل تثبيت.

وPS: عندما حصلت على "غير قادر على قراءة غير معروف تحميل 0x80000022 قيادة" خطأ لقد تم تشغيل OSX 10.6.1 مع كسكودي 3.1.2

وهتافات -gary -

وهذا خطأ "القيادة تحميل" ويرجع ذلك إلى حقيقة أن شكل قابل للتنفيذ قد تغير من نظام التشغيل اي فون 3.0 لنظام التشغيل اي فون 3.1.

http://networkpx.blogspot.com/2009/09 /about-lcdyldinfoonly-command.html

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