你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS SDK 開發

iOS SDK 開發

編輯:IOS開發基礎

在 SDK 開發中,經常會碰到一個問題,假設 SDKUser.h 是 SDK 對外暴露的 Header, 其中 SDKUser 類型中的 uid 屬性是不對外暴露的,但在 SDK 中的某些私有類需要獲取這個屬性(或方法),這個時候我們需要怎麼處理呢?uid 屬性是一個對 SDK 外是不可以見的,但對 SDK 內是可見的,這種情況,就可以使用 Category 來解決這個問題:

SDKUser.h 對外暴露的頭文件:

@interface SDKUser : NSObject

@property(nonatomic, copy, readonly) NSString *username;

@end

在對外暴露的 Header 中,如果我們不希望外部來寫這個對象的時候,我們需要將屬性設置為只讀屬性,但是我們又需要在對內支持讀寫,這時我們需要在實現文件裡重新設置該屬性支持讀寫操作。

SDKUser.m 實現文件:

#import "SDKUser.h"

@interface SDKUser()

// 對外屬性
@property(nonatomic, copy, readwrite) NSString *username;

// 只對內屬性
@property(nonatomic, copy, readwrite) NSString *uid;

@end

@implementation SDKUser

@end

因為 username 屬性在 SDK 內是支持讀寫操作的,所以需要設置為 readwrite,而 uid 這個屬性這裡是不希望暴露給用戶的,所以我們將該屬性定義在 .m 文件裡中,但是定義 .m 文件裡時,只支持類內的訪問,如果 SDK 內的其它私有類想訪問就無法訪問到這個屬性了。

這種情況下,我們可以對 SDKUser 這個類進行 Category,並將 SDK 裡的相關私有屬性(或方法)實現在裡面:

#import "SDKUser.h"

@interface SDKUser (SDKInner)

// 基本屬性
@property(nonatomic, copy) NSString *uid;
@property(nonatomic, copy, readonly) NSString *username;

@end


--------------------------------


#import "SDKUser+SDKInner.h"

@implementation SDKUser (SDKInner)

@end

這樣的話 SDK 內的私有類就可以訪問 SDKUser 裡面的 uid 屬性,並且又不會暴露給開發者。





  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved