Установка переменных экземпляра напрямую? - PullRequest
1 голос
/ 28 марта 2012

Это вопрос, связанный с тем, который я опубликовал ранее сегодня. Сначала я искал, как лучше всего реализовать copyWithZone для объекта, который подклассов NSObject.Я очень доволен тем, что у меня есть (см. 001 :), но хотел спросить об удалении сеттеров (если это даже имеет значение, пожалуйста, скажите, если это действительно не нужно).

Мне было указано, что ямог бы написать:

newCrime->_title = [_title copyWithZone:zone];

У меня два вопроса: во-первых, -> использует нотацию C ++, существует ли способ target-c для доступа к свойству объекта (без использования нотации setter / dot)?

Наконец, assign и strong как бы я их написал, я почти уверен, что присвоение будет:

newCrime->_coordinate = _coordinate;

, но я не уверен, для чего писатьсильный указатель;

newCrime->_month =

.

@property(nonatomic, strong) NSString *month;
@property(nonatomic, strong) NSString *category;
@property(nonatomic, assign) CLLocationCoordinate2D coordinate;
@property(nonatomic, strong) NSString *locationName;
@property(nonatomic, copy) NSString *title;
@property(nonatomic, copy) NSString *subtitle;

.

// 001:
- (id)copyWithZone:(NSZone *)zone {
    Crime *newCrime = [[[self class] allocWithZone:zone] init];
    if(newCrime) {
        [newCrime setMonth:_month];
        [newCrime setCategory:_category];
        [newCrime setCoordinate:_coordinate];
        [newCrime setLocationName:_locationName];
        [newCrime setTitle:_title];
        [newCrime setSubtitle:_subtitle];
    }
    return newCrime;
}

1 Ответ

2 голосов
/ 28 марта 2012

-> - это не нотация объекта C ++, это нотация указателя на C.Пожалуйста, избавьтесь от этого мусора C ++:)

Что касается ARC, просто определите переменные в вашем интерфейсе следующим образом:

@interface myObject : NSObject
{
    __strong strongIvar;
    __weak weakIvar;
    __unsafe_unretained assignIvar;
}

@end

И ARC сделает все остальноекогда вы устанавливаете объект, используя обозначение указателя (->).

Для примера обозначения указателя в чистом C посмотрите следующий пример:

struct myStruct {
    int intMember;
    double doubleMember;
    char *stringMember;
};

#include <stdio.h>
#include <string.h>

int main(void) 
{
    struct myStruct *structVar = malloc(sizeof(myStruct));
    structVar->intMember = 10;
    structVar->doubleMember = M_PI * 2;
    structVar->stringMember = strdup("Hello World!");

    printf("%i %d %s", structVar->intMember, structVar->doubleMember, structVar->stringMember);

    free(structVar->stringMember);
    free(structVar);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...