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 的类。

C# NSObject 类及其子类是基础 Objective-C 实例的托管表示形式。 指向非托管代码 Objective-C 对象的指针存储在 属性中 Handle

请务必注意,编译器目前不支持 NSObject 的泛型子类。

类注册

创建 NSObject 的子类时,此子类使用基于实现详细信息的完整 .NET 类型名称的名称注册到 Objective-C 运行时。 如果需要确保在 Objective-C 运行时中使用特定名称公开 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”映射到 Objective-C“NSObject”类。 但方法不同。 Objective-C 方法无法很好地转换为 C# 方法,因此它们通常已进行了更改,以匹配 C# 语言、C# 成语和.NET Framework设计指南。

Objective-C 方法作为虚拟方法呈现到 C# 中,这些方法应用了特殊的 T:ObjCRuntime.ExportAttribute 。 编译器使用此属性将 C# 名称映射到 Objective-C 名称。 这些属性显示在每个函数之上的 API 文档中,以帮助确定特定 C# 方法调用的 Objective-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 世界公开。 如果要向 Objective-C 世界公开任意 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);
	}
}

生命周期

C# NSObject 及其子类是基础 Objective-C 对象的托管包装器。 它们是在使用“new”运算符创建新实例时,或者将现有非托管对象呈现到 C# 世界中时,从 C# 创建的。

使用“new”运算符从 C# 创建对象时,该对象最初由 C# 拥有,C# 将保留对对象的引用。 仅当垃圾回收器确定没有挂起的托管引用时,或者你手动调用对象上的 Dispose 方法时,才会删除此引用。

调用返回 NSObject 的方法或属性时,C# NSObject 也是按需创建的。 此时,运行时将检查对象缓存,并确定给定的 Objective-C NSObject 是否已呈现到托管世界。 如果对象已浮出水面,则将返回现有对象,否则将调用采用 IntPtr 作为参数的构造函数来构造对象。

与框架对象的纯“对等” (那些仅是 Objective-C 对象的 C# 表示形式且没有额外托管关联状态的对象,) 运行时可以使用前面提到的构造函数按需重新创建。

NSObjects 的用户子类通常包含 C# 状态,因此每当 Objective-C 运行时对这些对象之一执行“保留”操作时,运行时都将创建一个 GCHandle,使托管对象保持活动状态,即使没有对对象的 C# 可见引用也是如此。 这简化了预订,因为状态将自动保留。

对 NSObject 执行的 Dispose 操作将始终删除对基础 Objective-C 对象的引用,但不会销毁托管状态,仅当托管代码和非托管代码都释放了对象时,才会发生这种情况。 这与 .NET 略有不同,因为在 .NET 上,一旦释放对象,就不可能对对象调用任何方法,因为它被视为无用的。 NSObjects 的情况并非如此。

采用协议

在 MonoTouch 中,大多数 Objective-C 协议映射到应用 T:ObjCRuntime.ModelAttribute 的类。 采用协议的方法是对要采用的方法进行子类化和覆盖。

在极少数情况下,需要自行采用临时协议。 如果需要采用 Objective-C 协议,则应在类上使用 AdoptsAttribute ,并提供要采用的协议的名称。 通常,采用协议时,还必须使用 列出要采用的所有 Objective-C 选择器。

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

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

键值编码

键值编码是一种机制,可用于按对象名称访问其属性,而不是使用 C# 方法直接访问它们。

若要向Key-Value编码系统公开 C# 属性,只需将 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 (“user”) 获取对象中用户属性的值。

此外,可以使用键路径让运行时为你重复调用 ValueForKey 或 SetValueForKey。 使用点分隔键。 例如,keypath“user.address.phone.mobile”将请求 user 属性,然后请求用户的 address 属性,然后请求地址上的 phone 属性,最后请求手机上的 mobile 属性,最后使用结果作为值。 可以使用 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)

使用字符串 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)

在主 UI 线程上异步调用指定的代码。

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)

在主 UI 线程上同步调用指定的代码。

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)

获取适用于 this 对象的 对象的数组UIAccessibilityCustomRotor

SetAccessibilityCustomRotors(NSObject, UIAccessibilityCustomRotor[])

设置适用于 this 对象的 对象数组UIAccessibilityCustomRotor

适用于

另请参阅