Являются ли @property и @synthesize в Objective-C такими же, как attr_accessible в языке программирования Ruby? - PullRequest
2 голосов
/ 25 августа 2011

Я могу использовать @property и @synthesize в Objective-C, поэтому мне не нужно писать методы получения и установки. В Ruby есть attr_accessible, делающий то же самое, по моему мнению. Я прав или есть небольшая разница?

Ответы [ 3 ]

2 голосов
/ 25 августа 2011

Вы почти правы (тм). Вероятно, единственное отклонение состоит в том, что объявление @property с модификатором readonly приведет к attr_reader в рубине. И хотя у ruby ​​есть attr_writer, в Objective-C нет такой вещи, как writeonly свойство.

2 голосов
/ 25 августа 2011

в базовом выражении ДА

@synthesize спасает вас от написания методов

Вы также можете использовать @dynamic, а затем реализовать их самостоятельно.

1 голос
/ 25 августа 2011

В основном да, это то же самое: В ruby ​​у вас есть метод arr_accessible, который создает для вас геттер и сеттеры. в target-c @property создает непосредственно getter и setter в вашем .m файле. пример:

@interface MaClasse : NSObject {
  int myVariable;
}

@property(nonatomic, assign) int myVariable;
@end

добавление @property аналогично созданию:

-(int)myVariable {
  return myVariable;
}

и

-(void)setMyVariable:(int)newValue {
  myVariable = newValue;
}

вы добавляете эти методы, добавляя @synthetize myVariable в ваш файл .m.

в ruby, вы просто должны это сделать

class MyClass
  attr_accessor :my_variable 
end

attr_accessor :my_variable эквивалентно этому:

def my_variable
  @my_variable
end

def my_variable=(my_variable)
  @my_variable = my_variable
end
...