Поделиться через


NSObject Класс

Определение

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

[Foundation.Register("NSObject", true)]
public class NSObject : Foundation.INSObjectProtocol, IDisposable, IEquatable<Foundation.NSObject>
type NSObject = class
    interface INSObjectProtocol
    interface INativeObject
    interface IDisposable
    interface IEquatable<NSObject>
Наследование
NSObject
Производный
Атрибуты
Реализации

Комментарии

Это базовый класс, используемый для привязки классов Objective-C к классам C#. Простое подклассирование из NSObject приведет к получению класса, который может быть передан в Objective-C.

Класс NSObject C# и их подклассы являются управляемыми представлениями базовых экземпляров Objective-C. Указатель на объект Objective-C неуправляемого кода хранится в свойстве Handle .

Важно отметить, что в настоящее время компилятор не поддерживает универсальные подклассы NSObject.

Регистрация класса

При создании подкласса NSObject этот подкласс регистрируется в среде выполнения Objective-C с именем на основе полного имени типа .NET, являющегося подробными сведениями о реализации. Если необходимо убедиться, что класс C# предоставляется с определенным именем в среде выполнения Objective-C, можно применить атрибут T:ObjCRuntime.RegisterAttribute к классу и указать имя, которое должен иметь класс.

Приведенные выше обычно используются в случаях, когда требуется ссылаться на класс по имени в коде Objective-C, при использовании XIB-файлов Конструктора интерфейсов и раскадровки или при использовании установки сериализации Objective-C (например, при использовании NSCoder).

//
// This exposes the C# class _MySampleView as the Objective-C MyView
//
[Export ("MyView")]
public class _MySampleView : UIView {

}

Методы Objective-C

Как правило, классы MonoTouch сопоставляют один к одному с базовыми классами Objective-C. Например, класс C# MonoTouch.Foundation.NSObject сопоставляется с классом NSObject Objective-C. Но методы отличаются. Методы Objective-C не очень хорошо преобразуются в методы C#, поэтому в целом они были изменены в соответствии с языком C#, идиомами C# и рекомендациями по проектированию платформа .NET Framework.

Методы Objective-C отображаются в C# как виртуальные методы, к которым применяется специальный атрибут T:ObjCRuntime.ExportAttribute . Этот атрибут используется компилятором для сопоставления имен C# с именами Objective-C. Эти атрибуты показаны в документации по API поверх каждой функции, чтобы помочь определить, какой метод Objective-C вызывает конкретный метод C#.

Чтобы изменить поведение класса, используйте стандартные идиомы C#: создайте подкласс и переопределите методы, которые требуется изменить, и использовать "base". функция языка, которая при необходимости вызывается в базовом классе.

public class MyView : UISlider {
	public override void Draw (RectangleF rect)
	{
		// Let the base class draw first
		base.Draw (rect);

		// Our custom code
		var ctx = UIGraphics.GetCurrentContext ();
		UIColor.Gray.SetColor ();
		ctx.StrokeEllipseInRect (rect);
	}
}

По умолчанию в мире Objective-C будут доступны только перезаписанные методы. Если вы хотите предоставить произвольный метод C# в мире Objective-C, необходимо применить T:ObjCRuntime.ExportAttribute к общедоступному методу. Это можно сделать как со статическими методами, так и с методами экземпляра. После применения атрибута метод будет доступен для Objective-C, а стандартные операции маршалинга типов данных, поддерживаемые средой выполнения, становятся доступными для этих методов.

//
// Exposes the class StringUtilities to Objective-C with the 
// method:
//    - (NSString *) joinArray:(NSArray *) stringArray withSeparator:(NSString *sep);
//
// Used like this:
//   id utilities = [[StringUtilities alloc] init];
//   NSLog (@"Joined: %@", [utilities joinArray:users withSeparator:@", "]);
//
public class StringUtilities : NSObject {
	[Export ("joinArray:withSeparator:")]
	public string Join (string [] array, string separator)
	{
		return string.Join (separator, array);
	}
}

Жизненный цикл

NSObject C# и их подклассы являются управляемыми оболочками для базового объекта Objective-C. Они создаются на языке C#, когда вы создаете новый экземпляр с помощью оператора new или когда существующий неуправляемый объект отображается в мире C#.

При создании объекта из C# с помощью оператора "new" объект изначально будет принадлежать C#, а C# сохранит ссылку на объект . Эта ссылка будет удалена, только если сборщик мусора определит, что на нее нет ожидающих управляемых ссылок, или при вызове метода Dispose для объекта вручную.

Объекты NSObject В C# также создаются по запросу при вызове метода или свойства, возвращающего NSObject. На этом этапе среда выполнения будет искать кэш объектов и определять, был ли данный объект Objective-C NSObject уже передан в управляемый мир. Если объект был обнаружен, будет возвращен существующий объект, в противном случае для создания объекта вызывается конструктор, который принимает IntPtr в качестве параметра.

Чистые "одноранговые" объекты платформы (объекты, которые являются просто представлениями C# объекта Objective-C и не имеют дополнительного управляемого связанного состояния) могут быть повторно созданы средой выполнения по требованию с помощью конструктора, упомянутого выше.

Пользовательские подклассы NSObjects часто содержат состояние C#, поэтому всякий раз, когда среда выполнения Objective-C выполняет операцию "сохранения" для одного из этих объектов, среда выполнения создает GCHandle, который поддерживает работу управляемого объекта, даже если нет видимых ссылок на объект C#. Это значительно упрощает букэйпинг, так как состояние будет автоматически сохранено для вас.

Операция Dispose в NSObject всегда удаляет ссылку на базовый объект Objective-C, но не уничтожает управляемое состояние. Это произойдет только в том случае, если и управляемый код, и неуправляемый код освобождают объекты. Это немного отличается от .NET, так как в .NET после удаления объекта невозможно вызвать какие-либо методы в объекте, так как он считается бесполезным. Это не относится к NSObjects.

Принятие протоколов

В MonoTouch большинство протоколов Objective-C сопоставляются с классами, к которым применен атрибут T:ObjCRuntime.ModelAttribute . Кроме того, вы принимаете протокол путем подклассов и перезаписи методов, которые вы хотите применить.

Бывают редкие случаи, когда вы хотите самостоятельно принять специальный протокол. Если необходимо внедрить протокол Objective-C, следует использовать в AdoptsAttribute классе и указать имя протокола, который вы хотите применить. Как правило, при внедрении протокола необходимо также перечислить все селекторы Objective-C, которые вы внедряете с помощью T:ObjCRuntime.ExportAttribute.

[Adopts ("NSLocking")]
public class MyLockeingObject : NSObject {
	[Export ("lock")]
	public void Lock ()
	{
		// ...
	}

	[Export ("unlock")]
	public void Unlock ()
	{
		// ...
	}
}

Кодирование значения ключа

Кодирование ключевого значения — это механизм, позволяющий получать доступ к свойствам объекта по их имени, а не обращаться к ним напрямую с помощью метода C#.

Чтобы предоставить свойство C# Key-Value системе кодирования, достаточно добавить T:ObjCRuntime.ExportAttribute в свойство . Имена должны содержать только символы ASCII, начинаться со строчной буквы и не должны содержать пробелов.

public class CircleLayer : CALayer {
	[Export ("radius")]
	public double Radius { get; set; }

	// ...
}

Для поиска свойства по имени используются методы M:Foundation.ValueForKey(Foundation.NSString);* , а также функции M:Foundation.SetValueForKey(Foundation.NSObject, Foundation.NSString);*" , чтобы задать значение для указанного свойства. Например, можно вызвать foo. ValueForKey ("пользователь") для захвата значения свойства пользователя в объекте .

Кроме того, можно использовать пути к ключам, чтобы среда выполнения неоднократно вызывала ValueForKey или SetValueForKey. Разделяйте ключи с помощью точки. Например, путь к ключу user.address.phone.mobile запрашивает свойство пользователя, а затем запрашивает свойство address у пользователя, затем запрашивает свойство phone в адресе и, наконец, запрашивает свойство mobile на телефоне и, наконец, использует результат в качестве значения. M M:Foundation.ValueForKeyPath(Foundation.NSString);* для поиска свойства с помощью пути к ключу. и используется M:Foundation.SetValueForKeyPath(Foundation.NSObject, Foundation.NSString);* , чтобы задать значение с помощью пути к ключу.

При использовании путей к ключам, если поиск завершается сбоем, SetValueForUndefinedKey(NSObject, NSString) при установке значения будет вызываться , а ValueForUndefinedKey(NSString) при поиске значения — . Оба метода по умолчанию вызывают исключение Objective-C. Это поведение можно изменить, переопределив методы.

Наблюдение за значением ключа

Наблюдение за ключевым значением — это механизм, реализованный NSObject, который можно использовать для отслеживания изменений, выполняемых в NSObject с помощью системы кодирования значений ключей.

Чтобы класс наблюдал за уведомлением, необходимо переопределить ObserveValue(NSString, NSObject, NSDictionary, IntPtr) метод, который будет вызываться со сведениями об изменениях значений для определенного пути к ключу. Затем используйте AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr) , чтобы начать наблюдение за изменениями, и метод , RemoveObserver(NSObject, NSString, IntPtr) чтобы прекратить получение уведомлений.

Конструкторы

NSObject()

Конструктор по умолчанию, который инициализирует новый экземпляр этого класса без параметров.

NSObject(IntPtr)

Конструктор, используемый при создании управляемых представлений неуправляемых объектов; Вызывается средой выполнения.

NSObject(IntPtr, Boolean)

Конструктор, используемый при создании управляемых представлений неуправляемых объектов; Вызывается средой выполнения.

NSObject(NSObjectFlag)

Конструктор для вызова производных классов для пропуска инициализации и просто выделения объекта.

Поля

MonoMacAssembly
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

MonoTouchAssembly
Устаревшие..

Указывает на сборку montoouch.

PlatformAssembly

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Свойства

ChangeIndexesKey

Представляет значение, связанное с константой NSKeyValueChangeIndexesKey.

ChangeKindKey

Представляет значение, связанное с константой NSKeyValueChangeKindKey.

ChangeNewKey

Представляет значение, связанное с константой NSKeyValueChangeNewKey.

ChangeNotificationIsPriorKey

Константа уведомлений для ChangeNotificati

ChangeOldKey

Представляет значение, связанное с константой NSKeyValueChangeOldKey.

Class

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

ClassHandle

Дескриптор для этого класса.

DebugDescription

Понятное для разработчика описание этого объекта.

Description

Описание объекта , версия ToString для Objective-C.

Handle

Дескриптор (указатель) на представление неуправляемого объекта.

IsDirectBinding

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

IsProxy

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

RetainCount

Возвращает текущее число удержания Objective-C для объекта .

Self

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Superclass

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

SuperHandle

Дескриптор, используемый для представления методов в базовом классе для этого объекта NSObject.

Zone

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Методы

AddObserver(NSObject, NSString, NSKeyValueObservingOptions, IntPtr)

Регистрирует объект для внешнего наблюдения (с помощью NSString keyPath).   Наблюдаемые изменения отправляются в объектный ObserveValue(NSString, NSObject, NSDictionary, IntPtr) метод наблюдателя.

AddObserver(NSObject, String, NSKeyValueObservingOptions, IntPtr)

Регистрирует объект для наблюдения извне (с помощью string keyPath).   Наблюдаемые изменения отправляются в объектный ObserveValue(NSString, NSObject, NSDictionary, IntPtr) метод наблюдателя.

AddObserver(NSString, NSKeyValueObservingOptions, Action<NSObservedChange>)

Регистрирует объект для наблюдения извне с помощью произвольного метода.

AddObserver(String, NSKeyValueObservingOptions, Action<NSObservedChange>)

Регистрирует объект для наблюдения извне с помощью произвольного метода.

Alloc(Class)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

AutomaticallyNotifiesObserversForKey(String)

Указывает, предоставляет ли этот объект уведомления "ключ-значение" для указанного ключа.

AwakeFromNib()

Вызывается после загрузки объекта из nib-файла. Переопределители должны вызывать base. AwakeFromNib().

BeginInvokeOnMainThread(Action)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

BeginInvokeOnMainThread(Selector, NSObject)

Асинхронно вызывает указанный код в основном потоке пользовательского интерфейса.

Bind(NSString, NSObject, String, NSDictionary)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Bind(String, NSObject, String, NSDictionary)
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

BindingInfo(String)
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

BindingOptionDescriptions(String)
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

BindingValueClass(String)
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

CancelPreviousPerformRequest(NSObject)

Отменяет ожидающий вызов с задержкой по времени или PerformSelector.

CancelPreviousPerformRequest(NSObject, Selector, NSObject)

Отменяет отложенный по времени PerformSelector.

CommitEditing()

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

CommitEditing(NSObject, Selector, IntPtr)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

ConformsToProtocol(IntPtr)

Вызывается для определения того, реализует ли этот объект указанный протокол.

Copy()

Выполняет копирование базового объекта Objective-C.

DangerousAutorelease()

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

DangerousRelease()

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

DangerousRetain()

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

DidChange(NSKeyValueChange, NSIndexSet, NSString)

Указывает на изменение индексов для связи ко многим.

DidChange(NSString, NSKeyValueSetMutationKind, NSSet)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

DidChangeValue(String)

Указывает, что в указанном ключе произошло изменение.

Dispose()

Освобождает ресурсы, используемые объектом NSObject.

Dispose(Boolean)

Освобождает ресурсы, используемые объектом NSObject.

DoesNotRecognizeSelector(Selector)

Указывает, что этот объект не распознает указанный селектор.

Equals(NSObject)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Equals(Object)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

ExposedBindings()

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Finalize()

Метод завершения для объекта NSObject

FromObject(Object)

Упаковывает объект в NSObject.

GetBindingInfo(NSString)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetBindingOptionDescriptions(NSString)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetBindingValueClass(NSString)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetDefaultPlaceholder(NSObject, NSString)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetDefaultPlaceholder(NSObject, String)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetDictionaryOfValuesFromKeys(NSString[])

Извлекает значения указанных ключей.

GetHashCode()

Создает хэш-код для текущего экземпляра.

GetKeyPathsForValuesAffecting(NSString)

Пути к ключам, значения которых влияют на значение указанного ключа.

GetMethodForSelector(Selector)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetNativeField(String)
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetNativeHash()

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Init()

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

InitializeHandle(IntPtr)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

InitializeHandle(IntPtr, String)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Invoke(Action, Double)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Invoke(Action, TimeSpan)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

InvokeInBackground(Action)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

InvokeOnMainThread(Action)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

InvokeOnMainThread(Selector, NSObject)

Синхронно вызывает указанный код в основном потоке пользовательского интерфейса.

IsEqual(NSObject)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

IsKindOfClass(Class)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

IsMemberOfClass(Class)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

IsNewRefcountEnabled()

Внутренний — определяет, использует ли MonoTouch новую систему переключения ссылок.

MarkDirty()

Повышает уровень обычного однорангового объекта (isDirectBinding имеет значение true) в объект toggleref.

MutableCopy()

Создает изменяемую копию указанного объекта NSObject.

ObjectDidEndEditing(NSObject)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

ObserveValue(NSString, NSObject, NSDictionary, IntPtr)

Указывает, что значение указанного keyPath относительно данного объекта изменилось.

PerformSelector(Selector)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

PerformSelector(Selector, NSObject)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

PerformSelector(Selector, NSObject, Double)

Вызывает селектор для текущего экземпляра и, если obj не имеет значения NULL, он передает его в качестве одного параметра.

PerformSelector(Selector, NSObject, Double, NSString[])

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

PerformSelector(Selector, NSObject, NSObject)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

PerformSelector(Selector, NSThread, NSObject, Boolean)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

PerformSelector(Selector, NSThread, NSObject, Boolean, NSString[])

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

PrepareForInterfaceBuilder()

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

RemoveObserver(NSObject, NSString)

Запрещает указанному наблюдателю получать дальнейшие уведомления об изменении значений для указанного keyPath.

RemoveObserver(NSObject, NSString, IntPtr)

Запрещает указанному наблюдателю получать дальнейшие уведомления об изменении значений для указанного keyPath и контекста.

RemoveObserver(NSObject, String)

Запрещает указанному наблюдателю получать дальнейшие уведомления об изменении значений для указанного keyPath.

RemoveObserver(NSObject, String, IntPtr)

Запрещает указанному наблюдателю получать дальнейшие уведомления об изменении значений для указанного keyPath и контекста.

RespondsToSelector(Selector)

Распознает ли этот объект указанный селектор.

SetDefaultPlaceholder(NSObject, NSObject, NSString)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

SetDefaultPlaceholder(NSObject, NSObject, String)
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

SetNativeField(String, NSObject)
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

SetNilValueForKey(NSString)

Задает значение null для указанного ключа.

SetValueForKey(NSObject, NSString)

Задает указанное значение свойства, указанного ключом.

SetValueForKeyPath(IntPtr, NSString)

Конструктор, используемый при создании управляемых представлений неуправляемых объектов; Вызывается средой выполнения.

SetValueForKeyPath(NSObject, NSString)

Задает значение свойства, которое можно получить с помощью пути к ключу.

SetValueForUndefinedKey(NSObject, NSString)

Указывает на попытку записать значение в неопределенный ключ. Если значение не переопределено, вызывает исключение NSUndefinedKeyException.

SetValuesForKeysWithDictionary(NSDictionary)

Устанавливает значения этого объекта NSObject в указанный словарь.

ToString()

Возвращает строковое представление значения текущего экземпляра.

Unbind(NSString)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

Unbind(String)
Устаревшие..

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

ValueForKey(NSString)

Возвращает значение свойства, связанного с указанным ключом.

ValueForKeyPath(NSString)

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

ValueForUndefinedKey(NSString)

Указывает на попытку считывания значения неопределенного ключа. Если значение не переопределено, вызывает исключение NSUndefinedKeyException.

WillChange(NSKeyValueChange, NSIndexSet, NSString)

Указывает, что значения указанных индексов в указанном ключе собираются измениться.

WillChange(NSString, NSKeyValueSetMutationKind, NSSet)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

WillChangeValue(String)

Указывает, что значение указанного ключа изменится.

Методы расширения

ObjectDidBeginEditing(NSObject, INSEditor)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

ObjectDidEndEditing(NSObject, INSEditor)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetValidModes(NSObject, NSFontPanel)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

ValidateToolbarItem(NSObject, NSToolbarItem)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetDebugDescription(INSObjectProtocol)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

AcceptsPreviewPanelControl(NSObject, QLPreviewPanel)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

BeginPreviewPanelControl(NSObject, QLPreviewPanel)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

EndPreviewPanelControl(NSObject, QLPreviewPanel)

Базовый класс для всех привязанных объектов, которые сопоставляют с объектами Objective-C.

GetAccessibilityCustomRotors(NSObject)

Возвращает массив объектов, подходящих UIAccessibilityCustomRotor для this объекта .

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

Задает массив объектов, подходящих UIAccessibilityCustomRotor для this объекта .

Применяется к

См. также раздел