Tôi bắt đầu phát triển iOS trong khi cố gắng nắm bắt Objective-C và tôi vẫn đang ở giai đoạn đó, nơi tôi nhìn, tôi thấy những thứ không có ý nghĩa với lập trình viên kỳ cựu như tôi. Trong this Game Kit example on Apple's dev site, một trong những tập tin tiêu đề tuyên bố một giao diện lớp, thời gian ba khác nhau ...Tại sao ví dụ mã này trên trang web dev của Apple khai báo ba giao diện cho cùng một lớp?
@interface SessionManager : NSObject <GKSessionDelegate> {
NSString *sessionID;
GKSession *myGKSession;
NSString *currentConfPeerID;
NSMutableArray *peerList;
id lobbyDelegate;
id gameDelegate;
ConnectionState sessionState;
}
@property (nonatomic, readonly) NSString *currentConfPeerID;
@property (nonatomic, readonly) NSMutableArray *peerList;
@property (nonatomic, assign) id lobbyDelegate;
@property (nonatomic, assign) id gameDelegate;
- (void) setupSession;
- (void) connect:(NSString *)peerID;
- (BOOL) didAcceptInvitation;
- (void) didDeclineInvitation;
- (void) sendPacket:(NSData*)data ofType:(PacketType)type;
- (void) disconnectCurrentCall;
- (NSString *) displayNameForPeer:(NSString *)peerID;
@end
// Class extension for private methods.
@interface SessionManager()
- (BOOL) comparePeerID:(NSString*)peerID;
- (BOOL) isReadyToStart;
- (void) voiceChatDidStart;
- (void) destroySession;
- (void) willTerminate:(NSNotification *)notification;
- (void) willResume:(NSNotification *)notification;
@end
@interface SessionManager (VoiceManager) <GKVoiceChatClient>
- (void) setupVoice;
@end
tôi thấy rằng mỗi giao diện là khác nhau, nhưng rõ tên cùng lớp.
- Lý do cho việc này là gì?
- Tôi cũng nhận thấy hành vi tương tự này trong các ví dụ mã khác, chỉ thay vì khai báo nhiều giao diện trong tệp tiêu đề, bạn sẽ thấy một khối @interface được khai báo phía trên cùng của tệp triển khai .m, thường ở trên @implementation block. Tại sao?
Cảm ơn bạn rất nhiều vì đã khôn ngoan!