NSObjectFlag Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Класс Sentinel, используемый платформой MonoTouch.
public class NSObjectFlag
type NSObjectFlag = class
- Наследование
-
NSObjectFlag
Комментарии
Единственной целью класса NSObjectFlag является использование в качестве sentinel в иерархии классов NSObject, чтобы гарантировать, что фактическая инициализация объекта происходит только в NSObject.
При связывании конструкторов с помощью NSObjectFlag.Empty единственное, что произойдет, — это выделение экземпляра объекта, вызовы методов init: в базовых классах не будут выполняться. Если код зависит от этого для инициализации, вы несете ответственность за прямой вызов правильного метода инициализации. Например:
//
// The NSObjectFlag merely allocates the object and registers the
// C# class with the Objective-C runtime if necessary, but no actual
// initXxx method is invoked, that is done later in the constructor
//
// This is taken from Xamarin's source code:
//
[Export ("initWithFrame:")]
public UIView (System.Drawing.RectangleF frame) : base (NSObjectFlag.Empty)
{
// Invoke the init method now.
var initWithFrame = new Selector ("initWithFrame:").Handle;
if (IsDirectBinding) {
Handle = ObjCRuntime.Messaging.IntPtr_objc_msgSend_RectangleF (this.Handle, initWithFrame, frame);
} else {
Handle = ObjCRuntime.Messaging.IntPtr_objc_msgSendSuper_RectangleF (this.SuperHandle, initWithFrame, frame);
}
}
Кроме того, если для инициализации требуется базовый класс, следует вызвать один из других конструкторов, которые принимают некоторые параметры.
class MyViw : UIView {
[Export ("initWithFrame:")]
public MyView (RectangleF frame) : base (frame)
{
// this initialized MyView by calling the UIView constructor
// that initializes the object from a RectangleF frame.
}
}
Поля
Empty |
Экземпляр Sentinel. |