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?
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
@privateis 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).