output
The fraction is: 3/10
The complex number is: 5.000000 + 15.000000i
Fraction conforms to NSCopying
protocol 的宣告十分简单,基本上就是 @protocol ProtocolName (methods you must implement) @end。
要遵从(conform)某个 protocol,将要遵从的 protocols 放在 <> 里面,并以逗点分隔。如:@interface SomeClass <Protocol1, Protocol2, Protocol3>
protocol 要求实作的 methods 不需要放在 header 档里面的 methods 列表中。如你所见,Complex.h 档案里没有 -(void) print 的宣告,却还是要实作它,因为它(Complex class)遵从了这个 protocol。
Objective-C 的接口系统有一个独一无二的观念是如何指定一个型别。比起 C++ 或 Java 的指定方式,如:Printing *someVar = ( Printing * ) frac; 你可以使用 id 型别加上 protocol:id <Printing> var = frac;。这让你可以动
态地指定一个要求多个 protocol 的型别,却从头到尾只用了一个变数。如:<Printing, NSCopying> var = frac;
就像使用@selector 来测试对象的继承关系,你可以使用 @protocol 来测试对象是否遵从接口。如果对象遵从这个接口,[object conformsToProtocol: @protocol( SomeProtocol )] 会回传一个 YES 型态的 BOOL 对象。同样地,对 class 而言也能如法炮制 [SomeClass conformsToProtocol: @protocol( SomeProtocol )]。