Advertise with us

I misunderstanding Encapsulation rules in objective c.

I will explain my question from an example.

In .H file//

@interface Employee:NSObject {

@private NSString *name;


@property(nonatomic,retain) NSString *name;


in .M file//

@implementation {

@synthesize name; 



In this scenario when i access the name property within another class , like myEmp.Name = @"John"; it doesn't raise any issue. Does this according to the encapsulation rules or am I misunderstanding?

Last updated:8/21/2015 8:50:13 AM

1 Answers

Jessica James
Jessica James

In Objective-C, only an instance method of object can access an instance variable. There is no way for an external object to access the instance variables of an object directly. The @private is only relevant to inheritance.


To make the variables accessable there are properties. A property defines a method, and methods on Objective-C are all public. There is no way in Objective-C do define private methods, you can only "hide" them by declaring them somewhere else than the public .h file (e.g. inside the .m file via @interface Employee() which declares an anonymous section).