что такое @private? и как его использовать? - PullRequest
4 голосов
/ 20 января 2011

Я вижу, что в одном из моих проектов @private здесь есть код ..

@interface mapview : UIViewController<CLLocationManagerDelegate, MKMapViewDelegate,UITextFieldDelegate> {
 @private
  CLLocationManager *_locationManager;
  MKReverseGeocoder *_reverseGeocoder;
  MKMapView* _mapView;
}

как это можно использовать?

я знаю, может быть, это слишком низкий вопрос уровня ..Я хочу знать, как использовать @private здесь.

Ответы [ 3 ]

4 голосов
/ 20 января 2011

@private ограничивает область видимости или «видимость» переменных экземпляра, объявленных в директиве @private.Компилятор (предположительно) обеспечивает выполнение этой области и не разрешает прямой доступ к частным переменным экземпляра вне класса, который объявляет их .В современных средах выполнения Objective C (64-разрядных на OS X или iOS 4 или выше) переменные экземпляра не должны быть объявлены в классе @interface, и видимость не является проблемой.В устаревших средах выполнения переменные экземпляра должны были быть объявлены в @interface, поэтому @private был единственным способом запретить клиентскому коду использовать переменные экземпляра напрямую.

См. Objective-CРуководство по языку для получения дополнительной информации (включая @public, @protected и @package модификаторы видимости).

GCC не обеспечивает видимость, но я считаю, что Clang 2.0 будет.

2 голосов
/ 20 января 2011

Это означает, что эти переменные экземпляра считаются «закрытыми» для класса и к ним нельзя обращаться напрямую (что вряд ли когда-либо будет сделано в Obj-C, так как это так динамично, и Cocoa дает вам так много свободных сгенерированных средств доступа). Итак, это означает, что вы не можете сделать что-то вроде этого:

mapview* myMapView = [[mapview alloc] initWithNibName:nil bundle:nil];
CLLocationManager* myMapViewsLocationManager = myMapView->_locationManager; // NO!!

Поскольку переменная является закрытой, вышеприведенное не должно работать (обратите внимание, что компилятор фактически разрешает это в данный момент, но вы получите предупреждение, что когда-нибудь этого не произойдет ... и я думаю, что компилятор clang 2.0 может фактически сгенерировать серьезная ошибка).

1 голос
/ 20 января 2011

@ private - это модификатор видимости. Переменная @private может быть просмотрена и использована только в том классе, в котором она определена.

@ public позволит другим классам просматривать и изменять эту переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...