簡體   English   中英

需要澄清協議中聲明的屬性規則

[英]Clarification needed about the rules of properties declared in protocols

我對協議中聲明的屬性有一些疑問。

返回類型差異

@protocol IHaveProperties

@required

@property (nonatomic, strong) IAmOfTypeX *propertyOfProtocolType;
@property (nonatomic, strong) NSArray *array;

@end

@interface ClassThatHasProperties : NSObject<IHaveProperties>

@property (nonatomic, strong) ImplementationOfTypeX *propertyOfProtocolType;
@property (nonatomic, strong) NSMutableArray *array;

@end

好的,所以我嘗試使用協議/類組合進行此操作,但令我沮喪的是,它進行了編譯。

這是如何運作的? 從技術上講,這不符合接口嗎?

屬性聲明修飾符

@protocol IHaveProperty

@required

@property (nonatomic, strong, readonly) *example;

@end

@interface HaveProperty : NSObject<IHaveProperty>

@property (nonatomic, strong, readonly) *example;

@end

我的Mac現在正在重新啟動,因此我無法嘗試該操作,但我認為這可以,因為協議聲明沒有任何支持。 所有的修飾符都不會對調用者感興趣,而只會對實現該協議的類感興趣。

如果查看<NSObject> 協議 ,您會發現它將方法和屬性結合在一起:

@protocol NSObject

- (BOOL)isEqual:(id)object; @property (readonly) NSUInteger hash;

@property (readonly) Class superclass;
- (Class)class OBJC_SWIFT_UNAVAILABLE("use 'anObject.dynamicType' instead");
- (instancetype)self;

- (id)performSelector:(SEL)aSelector;
- (id)performSelector:(SEL)aSelector withObject:(id)object;
- (id)performSelector:(SEL)aSelector withObject:(id)object1 withObject:(id)object2;

- (BOOL)isProxy;

- (BOOL)isKindOfClass:(Class)aClass;
- (BOOL)isMemberOfClass:(Class)aClass;
- (BOOL)conformsToProtocol:(Protocol *)aProtocol;

- (BOOL)respondsToSelector:(SEL)aSelector;

- (instancetype)retain OBJC_ARC_UNAVAILABLE;
- (oneway void)release OBJC_ARC_UNAVAILABLE;
- (instancetype)autorelease OBJC_ARC_UNAVAILABLE;
- (NSUInteger)retainCount OBJC_ARC_UNAVAILABLE;

- (struct _NSZone *)zone OBJC_ARC_UNAVAILABLE;

@property (readonly, copy) NSString *description; @optional @property
(readonly, copy) NSString *debugDescription;

@end

您必須使用了descriptionsuperclass屬性。 與函數相比,屬性的處理方式沒有任何區別。 實現協議的類將提供協議屬性的獲取器和/或設置器。 同樣,擁有委托對象的類將調用其屬性,例如: self.delegate.propertyName.

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM