With [arr count]; you send the message count to the array object.
If arr.count comes to the right of some expression, you are calling the getter of the count property, which is basically the same as [arr count];
If object.someProperty comes to the left of some expression, you are calling the setter of the count property, which is basically the same as [object setSomeProperty:someValue].
Because the syntax of the getter and the sending a message to an object represent the same thing for a property (when on right side of an expression), the compiler allows you to use the . (dot) syntax even if the name of what comes right after the dot is not necessarily a getter of a property (for example count is a method of the NSArray class, but compiler does not complain if you use [arr count] or arr.count).