Re: [問題] 如何做到類似Java的跨物件呼叫?

看板MacDev作者 (Howdiun)時間10年前 (2015/08/05 09:40), 編輯推噓1(108)
留言9則, 4人參與, 最新討論串2/2 (看更多)
沒有class var但是有static class 如果你去google通常會跟你說用dispatch_once 以下提供另一種obj-c的方案 首先新增一個ClassA 在ClassA.m裡面實作 static ClassA *a; + (ClassA *)sharedInstance { if (!a) { a = [[self alloc] init]; } return a; } 在ClassA.h裡面放下 + (ClassA *)sharedInstance; 之後只要使用[ClassA sharedInstance]就可以了 之後在.h裡面宣告 @property (nonatomic, assign) NSInteger *x; 就可以用[ClassA sharedInstance].x取得類似class var的東西 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 211.75.221.136 ※ 文章網址: https://www.ptt.cc/bbs/MacDev/M.1438738808.A.BBC.html

08/05 16:56, , 1F
08/05 16:56, 1F

08/05 17:11, , 2F
如果要在多執行緒中使用還是建議是用dispatch_once
08/05 17:11, 2F

08/05 17:12, , 3F
另外是有最不安全的使用方式就是在h檔的interface定義變數
08/05 17:12, 3F

08/05 17:13, , 4F
在定義的{}裡面加上@public,這樣子它下面的變數就會公開
08/05 17:13, 4F

08/05 17:14, , 5F
這樣子就可以使用ClassA *a = [ClassA new];
08/05 17:14, 5F

08/05 17:15, , 6F
NSInteger x = a->x;取值
08/05 17:15, 6F

08/05 18:37, , 7F
這個一定要用 dispatch_once 的, 你這樣寫根本是 race
08/05 18:37, 7F

08/05 18:38, , 8F
condition waiting to happen...
08/05 18:38, 8F

08/06 09:15, , 9F
PO文長知識了 感謝版友開導
08/06 09:15, 9F
文章代碼(AID): #1LmMbuky (MacDev)
文章代碼(AID): #1LmMbuky (MacDev)