1. 程式人生 > >iOS 介面傳值 單例模式

iOS 介面傳值 單例模式

介面之間傳值 場景
1.從前往後傳值 : 屬性傳值

1 在後一介面定義屬性
2 在前一介面push之前將傳遞的資料給屬性賦值
3 在後一介面通過屬性取到傳遞資料使用

2.從後往前傳值 :代理傳值

1 在後一介面定義協議
2 在後一介面定義代理屬性
3 在前一介面進入後以介面之前,將後一介面的代理指定為前一介面物件
4 前一介面服從協議
5 前一介面實現協議中的方法
6 在後一介面返回前一介面之前,讓代理執行協議中的方法,並把資料通過方法的引數傳遞

             block傳值

1 定義一個block類的屬性
2 傳遞資料到上一個介面
3 將block的值傳出 (取出)

3.中間間隔多個介面間傳值:單例傳值

1.建立一個單例物件
2.新增一個單例方法(便利構造器方法)
3.在單例類新增屬性,儲存傳遞的資料
4. 把資料儲存到單例物件的屬性中
5.當需要資料時,直接從單例物件屬性中獲取

下面介紹單例模式

單例:只有一個物件。物件在程式執行期間空間一直存在,

為了保證只有一個物件,我們使用靜態變數儲存物件的地址,如果指標變數為空,則建立物件否則直接將物件的原有地址返回,但是隻alloc 不release,所以造成記憶體洩露問題。單例模式主要用來解決特定問題,一般不會使用過多的單例類

pragma 單例傳值1. 建立單例類

新建一個類,繼承於 NSObject

@interface single : NSObject

pragma 單例傳值2. 新增一個單例方法

  • (single *)Singletion;

實現部分

static  single *singletion = nil;
+ (single *)Singletion {
    //多執行緒下安全問題  加鎖
    @synchronized (self) {
        if (!singletion ) {
            singletion = [[single alloc] init];
        }
        return
singletion; } }

pragma 單例傳值3. 新增屬性,儲存傳遞的資料

//為該類新增一個屬性,儲存要傳遞的資料
@property (nonatomic, retain) NSString *str;

UITextField tf1 = (UITextField )[self.view viewWithTag:111];

pragma 單例傳值4 將要傳遞的資料儲存到單例的屬性中

single *obj = [single Singletion ];
obj.str = tf1.text;

pragma 單例傳值5. 需要資料時,從單例物件的屬性中取出
這裡就是一個簡單地舉例
例 :label.text = [single Singletion].str;