我刚刚创建了一个普通的MyClass并定义了一个实例变量
@interface MyMFMessageComposeViewController : NSObject
{
NSString *body;
NSArray * recipients;
}
@property (readwrite, strong) NSString *body;
@property (readwrite, strong) NSArray * recipients;
@end
然后我选择了MFMessageComposeViewController
。
并且它工作 - 令人惊讶 - 由于某种原因,类变量被正确转移。
这是如何运作的?运行时是否真的搜索类变量NAMES以找到适当的类变量?
我认为强制只会是记忆的重叠。
非常感谢您的见解?
答案 0 :(得分:3)
Objective-C是弱类型的(有些人甚至说它是无类型的),这意味着对象的确切类型无关紧要,只要它响应所有选择器(方法名称)程序试图发送。
MyMFMessageComposeViewController和MFMessageComposeViewController都有名为body
,setBody
,recipients
和setRecipients
的方法,因为这两个类都声明并合成了名为body和recipients的属性。 (请记住,合成属性只会创建这些访问器方法。)如果从外部对象访问成员变量,则使用这些方法,即使使用点表示法来执行此操作。
简而言之,您不是直接访问实例变量;相反,你正在使用访问器方法,并且因为Objective-C在调用方法时并不关心对象的类型,所以它一切正常。
所有这一切,你应该删除这个类并用适当的子类替换它,此时你(可能)不必担心类型转换。