2015-02-19 23 views
8

trước đây tôi đã sử dụng mô hình singleton sau:Singleton pattern trong Swift 1.2

class Singleton { 
    class var sharedInstance : Singleton { 
     struct Static { 
      static let instance : Singleton = Singleton() 
     } 
     return Static.instance 
    } 
} 

Khi Xcode beta mới với Swift 1.2 được phát hành tôi muốn thử ra các thuộc tính của lớp tĩnh mới và phương pháp. Vì vậy, tôi đã cố gắng một cái gì đó tương tự như sau:

class Singleton { 
    static let sharedInstance : Singleton = Singleton() 
} 

Nhìn vào trình gỡ rối khi sử dụng này nó có vẻ như rất nhiều trường hợp lồng nhau của lớp singleton được tạo ra bởi các lớp liên tục:

Screenshot of debugger

Nhưng tìm kiếm thông qua phân bổ có vẻ như chỉ có một trường hợp được tạo ra. Tôi đoán điều đó có nghĩa là nó hoạt động chính xác, nhưng tôi không thấy hành vi tương tự với mẫu đầu tiên.

+0

Cách thứ hai dường như hoạt động với tôi – Ian

+0

Nếu bạn đặt điểm ngắt ở đâu đó sau khi hằng số lớp được khởi tạo, có vẻ như có nhiều phiên bản của lớp trên ngăn xếp không? –

+0

Tôi thiết lập một biến trên trường hợp chia sẻ bằng cách sử dụng phương pháp thứ hai trong một bộ điều khiển xem và sau khi gọi 'Singleton.sharedInstance.foo' trong bộ điều khiển xem thứ hai, nó đã thu hồi thành công giá trị của singleton cho thuộc tính đó – Ian

Trả lời

4

gì đang xảy ra ở đây là LLĐB được hiển thị cho bạn các dữ liệu tĩnh như thể nó là dữ liệu ví dụ.

Vì dữ liệu tĩnh, nó không tồn tại "trong cá thể", cách dữ liệu thể hiện bình thường làm cho LLDB đọc bộ nhớ mà không nên trình bày cho bạn như thể nó hợp lệ.

Nói chung, trình gỡ lỗi không được hiển thị dữ liệu tĩnh bên trong các cá thể (so sánh C++ tương đương và cách LLDB đại diện cho nó).

+0

Điều đó giải thích nó. –