1)C#接口和目标c @prototypes是否相同? 当原型中的函数是可选的并且它们是强制的时候。
2)@property(nonatomic,retain)的含义是什么
我是客观c环境的新手,深入了解这些概念。请帮我解决这个问题。
答案 0 :(得分:2)
问: C#接口和目标c @prototypes是否相同?当原型中的函数是可选的,并且当它们是强制的时。
A:这些基本相同。 Objective-C使用C#使用接口等协议。默认情况下,您列出的所有方法都是必需的(如果没有看到对象实现该方法,编译器会抱怨,但程序仍然会编译)。
问: @property是什么意思(非原子,保留)
答: @property
表示您要声明属性。 nonatomic
意味着对属性的读/写不是线程安全的,但它会使它更快。如果您需要线程安全属性,则必须使用atomic
(您只需忽略nonatomic
,因为atomic
是默认属性。retain
表示retainCount会自动增加当你设置属性时,你不必自己执行[someVariable retain]
调用。这有很大的内存管理含义,所以你经常会看到一个调用与下划线的ivar合成的原因:{{ 1}}
答案 1 :(得分:1)
1)我认为你的意思是协议。协议接近C#(和Java)中的接口,但语义不同之处在于接收消息的方法不需要实现该方法。然后忽略该消息。发送消息(即在C#中调用方法)也可以在nil上完成(即在C#中为null),不会发生任何事情。
2)@property(nonatmoic,retain)是属性的声明(它是一对方法,一个getter和一个setter)。它们可以使用@synthesize关键字自动实现。非原子的是不应该实现线程安全。 retain是对象引用计数应该在setter中递增/递减。
答案 2 :(得分:0)
1)我相信你指的是协议,正式协议,那些@protocol符号,几乎与C#接口完全相同,协议允许你指定一些可选方法的差异,即一些方法,你没有被迫实施。
2)属性相当于类的实例变量,可以@synthetized自动生成此属性的setter和getter。它可以声明为原子或非原子,这意味着如果setter和getter将作为单个操作执行或不执行。它也可以声明为保留,复制或分配。保留意味着ivar将向生成的setter中的obj发送保留msg,copy表示setter将克隆该实例,然后向其发送一个retain msg,而assign表示该值只是在没有retain msg的情况下分配。
希望有所帮助。
答案 3 :(得分:0)
人们忽略了一个巨大的差异:
您可以在C#中声明Interface类型的变量(如在Java中),但不能声明protocol类型的变量。