Question: Consider the below prototype, which is a common one,

```
-(void)writeData:(NSData *)data length:(NSInteger *)len;

```

I am aware what each part of this method means. My query is, whether the "length", the name for the second argument is optional?
Whether the compiler will compile the following:

```
-(void)writeData:(NSData *)data :(NSInteger *)len;

```

\**Edit:*\*Thanks for all your responses :)

Answer: 
It will, but it is considered bad style - basically you are violating the Objective-C naming conventions.

The first method is named `writeData:length:`, the second one `writeData::`
The compiler will not complain if you leave out the name tag for the second parameter (try it out to see for yourself to see that it works).

However, it is not optional in calls of methods where it is defined. For example, you cannot call the first method with the `length` portion of the method name omitted.

Also note that the colon is not optional when making a selector for the second method:

```
SEL(writeData::)

```