Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Performance difference between dot notation versus method call in Objective-C

You can use a standard dot notation or a method call in Objective-C to access a property of an object in Objective-C.

myObject.property = YES;

or

[myObject setProperty:YES];

Is there a difference in performance (in terms of accessing the property)? Is it just a matter of preference in terms of coding style?

like image 313
Ronnie Liew Avatar asked Aug 29 '08 16:08

Ronnie Liew


2 Answers

Dot notation for property access in Objective-C is a message send, just as bracket notation. That is, given this:

@interface Foo : NSObject
@property BOOL bar;
@end

Foo *foo = [[Foo alloc] init];
foo.bar = YES;
[foo setBar:YES];

The last two lines will compile exactly the same. The only thing that changes this is if a property has a getter and/or setter attribute specified; however, all it does is change what message gets sent, not whether a message is sent:

@interface MyView : NSView
@property(getter=isEmpty) BOOL empty;
@end

if ([someView isEmpty]) { /* ... */ }
if (someView.empty) { /* ... */ }

Both of the last two lines will compile identically.

like image 80
Chris Hanson Avatar answered Nov 01 '22 07:11

Chris Hanson


Check out article from Cocoa is My Girlfriend. The gist of it, is that there is no performance penalty of using one over the other.

However, the notation does make it more difficult to see what is happening with your variables and what your variables are.

like image 5
Misha M Avatar answered Nov 01 '22 07:11

Misha M