C#接口和目标c @prototypes是否相同?

时间:2011-07-29 12:40:31

标签: objective-c

  

1)C#接口和目标c @prototypes是否相同?   当原型中的函数是可选的并且它们是强制的时候。

     

2)@property(nonatomic,retain)的含义是什么

我是客观c环境的新手,深入了解这些概念。请帮我解决这个问题。

4 个答案:

答案 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类型的变量。