2011-09-20 7 views
5

Hiện tại tôi đang sử dụng Thuộc tính trên lớp AppDelegate.Đặt @property của một lớp Singleton

Bây giờ, khi nhu cầu của tôi cạn kiệt, tôi cần nhiều hơn thì 1 trong số các tài sản toàn cầu này, vì vậy tôi nghĩ để tạo ra một lớp Singleton sẽ giữ các thuộc tính và sẽ điều chỉnh chúng. Tôi tìm thấy rất nhiều thông tin về Singletons, nhưng tôi không thể tìm ra, liệu có thể sửa đổi tài sản mà không cần có Instance của lớp không?

Ví dụ:

@interface Tools : NSObject 

@property (nonatomic,retain) NSDictionary* item; 

... 

@end 

Tôi muốn làm:

[Tools setItem:someDict]; 
someClass = [someClass alloc] initWithItem:[Tools getItem]]; 

Tất cả các ý tưởng của tôi đã kết thúc với những vấn đề mà các công cụ lớp không có ví dụ. Tôi đã thử đặt mục là biến tĩnh (không phải thuộc tính), đã hoạt động, nhưng tôi chắc chắn rằng đây không phải là lý do tại sao để làm điều đó.

liên quan nhưng câu hỏi khác nhau, Thêm:

#import "Tools.h" 

Để hồ sơ dự án-Prefix.pch, vì vậy các thuộc tính mục sẽ được cung cấp từ khắp nơi về dự án, có phải là một ý tưởng tốt?

Trả lời

5

Bạn đang ở trong đó bạn cần một cá thể để sử dụng một singleton. Nhưng đâu là vấn đề?

[Tools sharedInstance].item = someDict; // or 
[[Tools sharedInstance] setItem:someDict; 

Phương pháp sharedInstance sau đó đảm bảo sự khởi tạo thích hợp của thể hiện Công cụ duy nhất. Tôi đã quen với nó. Lựa chọn thay thế là một thành viên của lớp. Bạn có thể nhìn vào chủ đề này:

BOOL being reset to NO in init method

+0

Cảm ơn! thats chính xác những gì tôi đã cố gắng để làm. – EladG

2

Theo như hiểu biết của tôi về Objective-C là mối quan tâm, không có những điều như vậy mà bạn có thể gọi @property mà không cần tạo một thể hiện.
Bạn có thể tham khảo How Do I declare Class-level Property in Objective-C

+0

Dễ hiểu. cảm ơn, thật tốt khi biết thông tin. – EladG

0

Có một cuộc thảo luận về @properties lớp trong this ARC-related thread (cách khuyến khích để làm độc thân với ARC là với các phương pháp lớp). Biến lớp chưa tồn tại nhưng tôi khuyên bạn nên tạo một radar để bỏ phiếu cho tính năng này.