Это сделано во время компиляции. Это точно эквивалентно "string1string2string3".
предположим Вы имеете:
string x = "string1string2string3"
string y = "string1" + "string2" + "string3"
компилятор выполнит соответствующее интернирование таким образом, что X и Y относятся к тем же объектам.
РЕДАКТИРОВАНИЕ: существует большой разговор [приблизительно 111] в ответах и комментариях. Многие разработчики, кажется, полагают, что конкатенация строк должна всегда быть сделанной с StringBuilder
. Это - сверхобобщение - это стоит понять , почему StringBuilder
хорошо в некоторых ситуациях, а не в других .
У меня была такая же проблема. В этом блоге есть множество сообщений по этой теме http://spitzkoff.com/craig/?p=81 .
Простое использование MKMapViewDelegate
не помогает помочь вам здесь, и создание подкласса MKMapView
и попытка расширить существующую функциональность также не сработали для меня.
В итоге я создал свой собственный CustomCalloutView
, которым я являюсь имея поверх моего MKMapView
. Вы можете стилизовать это представление по своему усмотрению.
Мой CustomCalloutView
имеет метод, аналогичный этому:
- (void) openForAnnotation: (id)anAnnotation
{
self.annotation = anAnnotation;
// remove from view
[self removeFromSuperview];
titleLabel.text = self.annotation.title;
[self updateSubviews];
[self updateSpeechBubble];
[self.mapView addSubview: self];
}
Он принимает объект MKAnnotation
и устанавливает собственный заголовок, после этого он вызывает два других метода, которые довольно уродливы, которые регулируют ширину и размер содержимого выноски, а затем рисуют вокруг него речевой пузырь в правильном месте.
Наконец, представление добавляется как подпредставление к mapView. Проблема с этим решением заключается в том, что трудно удерживать выноску в правильном положении при прокрутке карты. Я просто скрываю выноску в методе делегата представлений карты при изменении региона, чтобы решить эту проблему.
Потребовалось некоторое время, чтобы решить все эти проблемы, но теперь выноска ведет себя почти как официальная, но у меня она есть в мой собственный стиль.
В основном, чтобы решить эту проблему, нужно: a) Не допускайте появления пузыря выноски по умолчанию. б) Выяснить, какая аннотация была нажата.
Я смог добиться этого следующим образом: а) установка для canShowCallout значения NO b) создание подкласса MKPinAnnotationView и переопределение методов touchBegan и touchesEnd.
Примечание: вам необходимо обрабатывать события касания для MKAnnotationView, а не для MKMapView