intrebare @property si @synthesize directives
#1
Posted 11 March 2010 - 21:03
@class XYPoint;
@interface Rectangle: NSObject
{
int width;
int height;
XYPoint *origin;
}
XYPoint este o alta clasa ce contie 2 int x si y.
in functia main am 2 pointeri,1 de tipul Rectangle si unul de tipul XYPoint:
Rectangle *myRectangle = [[Rectangle alloc] init];
XYPoint *myPoint = [[XYPoint alloc] init];
ma intereseaza daca se poate cu @property si @synthesize sa pot aloca:
myRectangle.origin = myPoint;
pentru ca aceasta alocare sa functioneze(fara @property si @synthesize) am vazut ca trebuie create 2 medode(functii),un getter si un setter,dar acestea nu sunt apelate in main():
-(XYPoint *) origin;
-(void) setOrigin: (XYPoint *) pt;
#2
Posted 12 March 2010 - 16:42
am o intrebare,am urmatorul exemplu de clasa:
@class XYPoint;
@interface Rectangle: NSObject
{
int width;
int height;
XYPoint *origin;
}
XYPoint este o alta clasa ce contie 2 int x si y.
in functia main am 2 pointeri,1 de tipul Rectangle si unul de tipul XYPoint:
Rectangle *myRectangle = [[Rectangle alloc] init];
XYPoint *myPoint = [[XYPoint alloc] init];
ma intereseaza daca se poate cu @property si @synthesize sa pot aloca:
myRectangle.origin = myPoint;
pentru ca aceasta alocare sa functioneze(fara @property si @synthesize) am vazut ca trebuie create 2 medode(functii),un getter si un setter,dar acestea nu sunt apelate in main():
-(XYPoint *) origin;
-(void) setOrigin: (XYPoint *) pt;
origin si setOrigin nu tin de main, ci de clasa myRectangle, si ca atare apar in implementarea clasei.
Mai jos un exemplu.
1/ Vezi ca trebuie sa implementezi destroy pentru clase pentru care scrii tu settere si gettere pentru ca trebuie sa balansezi retain-release-urile la dealocarea clasei.
2/ [myRectangle setOrigin:myPoint]; e echivalent cu myRectangle.origin = myPoint; incepand cu ObjC 2.0 dar eu prefer prima varianta, mi se pare mai lizibila. YMMV.
#import <Cocoa/Cocoa.h> @interface XYPoint:NSObject { int x, y; } @end @implementation XYPoint - (id) initWithX:(int)px andY:(int) py { self = [super init]; x = px; y = py; return self; } - (NSString *) description { return [NSString stringWithFormat:@"Punct x=%d, y=%d", x, y]; } @end @interface Rectangle: NSObject { int width; int height; XYPoint *origin; } @end @implementation Rectangle -(XYPoint *) origin { return origin; } -(void) setOrigin: (XYPoint *) pt { [origin release]; origin = pt; [origin retain]; } @end int main() { NSAutoreleasePool * p = [NSAutoreleasePool new]; Rectangle *myRectangle = [Rectangle new]; XYPoint *myPoint = [[XYPoint alloc] initWithX:10 andY:20]; [myRectangle setOrigin:myPoint]; NSLog(@"originea este %@", [myRectangle origin]); [p release]; }
#3
Posted 12 March 2010 - 17:10
pentru mine e mai usoara a 2-a varianta myRectangle.origin = myPoint,asa accesam membri unei clase in c dar banuiesc ca ma voi obisnui cat de curand cu sintaxa
0 user(s) are reading this topic
0 members, 0 guests, 0 anonymous users