ООП, агрегация в цели c - PullRequest
       9

ООП, агрегация в цели c

1 голос
/ 12 января 2011

У меня есть несколько сложных объектов, и я не хочу их реализовывать, и позже у меня возникают утечки памяти, поэтому должен спросить :) Это хороший способ выполнения агрегации?Нужно ли и где очищать объект Role от пользователя?

#import "Role.h"

@interface User : NSObject {
    NSString *firstName;
    NSString *lastName;

    Role *role;
}
@property (nonatomic, retain) NSString *firstName;
@property (nonatomic, retain) NSString *lastName;

@property (nonatomic, retain) Role *role;
@end
#import "User.h"

@implementation User
@synthesize firstName;
@synthesize lastName;

@synthesize role;
@end

@interface Role : NSObject {
    NSInteger *roleId;
    NSString *title;
    NSString *description;
}
@property (nonatomic, retain) NSInteger *roleId;
@property (nonatomic, retain) NSString *title;
@property (nonatomic, retain) NSString *description;
@end
#import "Role.h"

@implementation Role
@synthesize roleId;
@synthesize title;
@synthesize description;
@end

1 Ответ

3 голосов
/ 12 января 2011

Ваши методы dealloc должны выглядеть следующим образом:

Для пользователя:

-dealloc
{
    [firstName release];
    [lastName release];
    [role release];
    [super dealloc];
}

Для роли:

-dealloc
{
    [title release];
    [description release];
    [super dealloc];
}

roleId освобождать не нужнопотому что NSInteger на самом деле является typedef для примитивного целочисленного типа.Это также означает, что объявление вашего свойства неверно, оно должно быть:

@property (nonatomic, assign) NSInteger roleId;

Кроме того, NSString является неизменным и реализует протокол копирования, поэтому ваши свойства NSString должны быть copy, а не retain.например,

@property (nonatomic, copy) NSString *firstName;

Редактировать

Как указывает Бьёрн, интерфейс для роли должен быть:

@interface Role : NSObject {
    NSInteger roleId;  // not a pointer
    NSString *title;
    NSString *description;
}
@property (nonatomic, assign) NSInteger roleId;
@property (nonatomic, copy) NSString *title;
@property (nonatomic, copy) NSString *description;
@end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...