在这份协议里面 @optional后面的措施 并不是 强制性的,也就是说 你 不一定要为 遵循这项协议的物件类型 编写 @optional后面的措施。相反,强制性的措施 可以放 在@required命令后面。
你 可以 自己 决定 是否遵循 协议,如果 你 决定 某类物件 遵循 某项协议,而 你 又 不编写 这项协议的具体措施,那么 编译器 就会发出 警告。
协议 跟物件类型 无关。任何一类物件 都可以 遵循 一项协议。
对 某个物件 采取 conformsToProtocol:这项措施 可以检查 这个物件 是否遵循 某项协议,比如 这样:
这段代码 检查了 currentObject这个物件 是否遵循 Drawing这项协议。
你 可以借助 编译器 检查 一个物件 是否遵循 一项协议。像 这样
将 协议的名称 放 在一对单书名号当中 就是告诉 编译器 变量currentObject中的物件 遵循 Drawing这项协议。如果 变量currentObject当中的物件 是 静态类型 并且 不遵循 Drawing这项协议,编译器 就会发出 警告。如果 变量currentObject当中的物件 是 动态类型,那么 编译器 就无法知晓 它 是否遵循 Drawing这项协议了。
你 还可以 将 一项协议 补充 在另外一项协议当中,比如 这样
就是 将 Drawing这项协议 补充 在Drawing3D这项协议当中。这 意味着 任何物件 如果 遵循 Drawing3D这项协议,同时 就必须遵循 Drawing这项协议。