What's the difference between formal and informal protocols in Objective-C?
-
About informal protocol described in [this post](http://stackoverflow.com/questions/2010058/informal-protocol-in-objective-c) – byJeevan Apr 25 '16 at 13:26
3 Answers
Formal and Informal Protocols
There are two varieties of protocol, formal and informal:
An informal protocol is a category on NSObject, which implicitly makes almost all objects adopters of the protocol. (A category is a language feature that enables you to add methods to a class without subclassing it.) Implementation of the methods in an informal protocol is optional. Before invoking a method, the calling object checks to see whether the target object implements it. Until optional protocol methods were introduced in Objective-C 2.0, informal protocols were essential to the way Foundation and AppKit classes implemented delegation.
A formal protocol declares a list of methods that client classes are expected to implement. Formal protocols have their own declaration, adoption, and type-checking syntax. You can designate methods whose implementation is required or optional with the @required and @optional keywords. Subclasses inherit formal protocols adopted by their ancestors. A formal protocol can also adopt other protocols.
Formal protocols are an extension to the Objective-C language.

- 3,013
- 1
- 20
- 47

- 31,966
- 10
- 88
- 84
-
1
-
-
-
-
1
-
@byJeevan `@required` and `@optional` are keywords on formal protocols to indicate that methods are required or not required, respectively, to be implemented by the object that is adhereing to it. – lostAtSeaJoshua May 31 '17 at 14:57
-
The important thing to note about informal protocols is that they were used heavily before the `@optional` keyword was introduced to formal protocols in Objective-C 2.0. Before the optional keyword, it was the only way to have an optional protocol method. – lostAtSeaJoshua May 31 '17 at 14:59
-
@lostAtSeaJoshua Do we have this concept of Informal protocols in Swift ? – subin272 Jan 23 '20 at 06:24
Informal Protocol : Category
(Implementations are Optional)
Formal Protocol : Extension
(Implementations are Optional and required)

- 30,846
- 15
- 61
- 74
-
Are Category methods implementations are optional? I don't think so, because I commented a method implementation and immediately I can see error "Method definition for 'xxxmethod' is missing". The xxxmethod is declared in .h file. – selva Sep 30 '16 at 21:09
-
2
The Objective-C language provides a way to formally declare a list of methods (including declared properties) as a protocol. Formal protocols are supported by the language and the runtime system. For example, the compiler can check for types based on protocols, and objects can introspect at runtime to report whether or not they conform to a protocol.

- 71
- 1
- 1