2013-04-01 1 views
0

В Objective-C, доступ к переменным ограничен тремя типами которых является @public, @private, @protected (по умолчанию) и @package .. Эти модификаторы доступа позволяют получить доступ к переменной через 4 ситуациях в порядке:есть способ определить переменную, доступную некоторым классам, а не другим?

1 - доступ к переменной из любого места.

2- доступ к переменной только внутри класса.

3- доступ к переменной из любого места в классе и его подклассах.

4- доступ к переменной из любого места в рамках.

мой вопрос: есть ли способ определить переменную, доступную некоторым классам, а не другим? (т. е. настраиваемая область для переменных)

+0

Это то, что протоколы дают вам –

+1

Не то, чтобы я знал. –

+0

Что ОП задал, его противоположность может быть выполнена с помощью ObjC Runtime. –

ответ

2

Ключевое слово C++ - это ключевое слово friend. Friend classes in Objective-C обсуждает тему.

+0

Это неправда, мах, это всего лишь обходной путь для имитации решения, так как вы меня перенаправили, это использование переменной с тем же именем без одного и того же бэкэнд, иначе объявить переменную в конкретном модификаторе доступа и использовать тот же имя в другом классе с другими модификаторами доступа, вы фактически определяете две переменные! – Meseery

+0

Вы правы, но это самый близкий ответ, доступный в Objective C. – mah

+0

aha я вижу, что, мах – Meseery

0

Вам нужно будет написать собственные методы настройки и получения.

- (id) get_abc_value:(id)from { 
if ([from isKindOfClass:[SomeRespectedClass class]]) { 
return abc; 
} 
return nil; 
} 
1

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

// MyClass.h 
@interface MyClass : SomeSuperclass { 
    int ivar; 
} 
@end 

// MyClass-Custom.h 
#include "MyClass.h" 
@interface MyClass() { 
    int anotherIvar; 
} 
@end 

Теперь anotherIvar будет доступен только для кода, директив #includes MyClass-custom.h. Вы можете создать дополнительные расширения класса в одном классе для получения дополнительных групп доступа.

Смежные вопросы