سؤال

لدي بعض مشكلات الذاكرة مع cllocation.

CLLocation *annotation = [[CLLocation alloc] initWithLatitude:[[tempDict objectForKey:@"lat"] doubleValue] longitude:[[tempDict objectForKey:@"lon"]doubleValue]];
CLLocation *item2 = [[CLLocation alloc] initWithLatitude:[newLatString doubleValue] longitude:[newLongString doubleValue]];
cell.detailTextLabel.text = [NSString stringWithFormat:@"%.1f km",[item2 distanceFromLocation:annotation]/1000];
[annotation release];
[item2 release];

لذلك حاولت القيام بذلك ، لكنني أدركت أنه لا يمكنك تعيين إحداثيات التعليق التوضيحي.

CLLocationCoordinate2D tempCoordinate = annotation.coordinate;
tempCoordinate.latitude = [[tempDict objectForKey:@"lat"] doubleValue];
tempCoordinate.longitude = [[tempDict objectForKey:@"lon"] doubleValue];
    annotation.coordinate = tempCoordinate;

هل هناك حل بديل هذا؟ لا أريد أن أكون تخصيصًا/إصرار على cllocation في كل مرة تسمى CellForrowatIndexPath ..

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

المحلول

كائنك الناتج هو NSString - فقط قم بإنشاء فئة تحتوي على NSString ، وكذلك المراجع/Ivars للبيانات المتوسطة عند الضرورة. ثم باستخدام المصطلح المراقب ، ما عليك سوى تحديث الخلايا عندما تتغير السلسلة (تصميمها بحيث تعتمد السلسلة على الإحداثيات). من المحتمل أن تقوم بإنشاء فئة تأخذ مجموعة من الوسائط عند التهيئة (على سبيل المثال الإحداثيات) ، وإنشاء NSString أثناء التهيئة ، ثم الرجوع إلى النتيجة إذا لم تتغير بياناتك أبدًا. يعتمد الأمر حقًا على البيانات التي تتوقعها سوف تتحول ، وعلى أي تردد.

نصائح أخرى

لا أريد أن أكون تخصيصًا/إصرار على cllocation في كل مرة تسمى CellForrowatIndexPath ..

لما لا؟ هل تعلم أنها تسبب مشاكل في الأداء؟ أنت تصدرهم على الفور ، لذلك لا يشغلون ذاكرة إضافية. يبدو Cllocation وكأنه فئة خفيفة الوزن للغاية ، ويتم تحسين وقت تشغيل Objective-C بشكل كبير ، لذلك من المحتمل أن تخصيص / init بسرعة كبيرة. حتى ترى مشكلة التمرير / perf / الذاكرة ، سأذهب مع ما ينجح ويسهل الحفاظ عليه.

التحسين المبكر هو جذر كل الشر - دونالد نوث

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