Jump to content


Forumul s-a mutat!

Aceasta este arhiva forumului MacForum.ro din perioada 2010-2014.
Noul forum poate fi accesat aici.
Conturile vechi nu mai sunt valabile pe noul forum!

Photo

intrebare @property si @synthesize directives


  • Please log in to reply
2 replies to this topic

#1 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 11 March 2010 - 21:03

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;

#2 Cristian Draghici

Cristian Draghici

    Membru nou

  • Membri
  • Pip
  • 12 posts
  • LocationBucuresti

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 boboc

boboc

    Veteran

  • Membri
  • PipPipPipPip
  • 668 posts
  • Locationvalcea

Posted 12 March 2010 - 17:10

ok,am inteles,mersi mult.
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