Provo a farti un esempio:
//File ACLass.h
#import <Foundation/Foundation.h>
@interface AClass : NSObject
@property (readonly) int n;
-(void) aMethod:(int) n;
-(void) anotherMethod:(int) n;
@end
//File AClass.m
#import "AClass.h"
@implementation AClass
@synthesize n;
-(void)aMethod:(int)n
{
self->n = n;
}
-(void)anotherMethod:(int)n
{
n = n;
}
@end
//main
#import <Foundation/Foundation.h>
#import "AClass.h"
int main(int argc, const char * argv[])
{
AClass* obj1 = [[AClass alloc] init];
AClass* obj2 = [[AClass alloc] init];
[obj1 aMethod:1];
[obj2 anotherMethod:2];
NSLog(@"obj1 = %d",obj1.n);
NSLog(@"obj2 = %d",obj2.n);
}
Se esegui il codice puoi notare che l'output sarà:
obj1 = 1;
obj2 = 0;
Questo perché nel metodo "aMethod" si utilizza "self->n", ovvero si va ad impostare la proprietà "n" dell'oggetto che chiama il metodo (in questo caso obj1). Nel metodo "anotherMethod", invece, l'istruzione "n = n" è praticamente inutile, poiché "n" è il parametro del metodo.
Se ancora non ti è chiaro ti consiglio di vedere questo video