Nếu tôi có ứng dụng thanh tab và có kế hoạch sử dụng Vị trí lõi trong các tab khác nhau, có một vị trí phổ biến để đặt mã được sử dụng để phân bổ/init CLLocationManager và nhận cập nhật khi startUpdatingLocation được gọi? Hoặc nếu nó sẽ được sử dụng trong hai tab khác nhau, sau đó tôi chỉ cần đặt nó trong mã cho mỗi tab? Chỉ cần tự hỏi những gì thực hành tốt nhất là kể từ khi tôi mới để lập trình. Cảm ơn.Nơi đặt mã chung cho iPhone, CLLocationManager
Trả lời
nếu bạn nhận thấy bạn đang sao chép những gì bạn đã viết hoặc phải đối mặt với mã viết tồn tại, hãy xem xét tạo giao diện (đối tượng, hàm đặt, v.v.) để xử lý các tác vụ này.
xem DRY (không tự lặp lại). sẽ có rất nhiều chức năng trùng lặp khi bạn viết một vài ứng dụng. tốt nhất là viết nó một lần và viết chính xác.
đây là một số hướng dẫn mức cao:
không đặt các tính năng ứng dụng cụ thể trong một giao diện chung (thay vào đó, sử dụng một lớp con được chia sẻ bởi 2 dự án)
luôn giữ của bạn cơ sở miễn phí của hack (trừ khi bạn đang đối phó với một vấn đề trong thư viện hệ thống). nếu khách hàng (ví dụ: các lớp con, người gọi) cần một cách giải quyết cụ thể hoặc yêu cầu một kiểm tra cụ thể, thì tốt hơn là làm cho họ xử lý nó.
khẳng định sử dụng để đảm bảo họ sử dụng giao diện như dự định, rà soát tất cả các đối số, điều kiện tiên quyết/hậu điều kiện, tình trạng của đối tượng của bạn, vv ..
giữ của bạn đối tượng/giao diện rất nhỏ và duy trì, với một mục đích rõ ràng về mục đích sử dụng của chúng. một cách tự nhiên, điều này sẽ dẫn đến số lượng đối tượng cao hơn.
tránh yêu cầu sử dụng dữ liệu đơn và dữ liệu tĩnh; có hầu như luôn luôn là một cách tốt hơn ngay cả khi nó đơn giản như buộc khách hàng để tạo ra một thể hiện của lớp học của bạn.
tạo thư viện với các giao diện này và chia chúng một cách hợp lý.
bây giờ mà đó là bao phủ ...
tôi muốn bắt đầu bằng cách sử dụng (có khả năng nhiều) trường hợp của đối tượng mà bạn sẽ cần. không có gì trong tài liệu nói rằng "bạn không nên tạo nhiều cá thể của đối tượng".
nếu điều này bằng cách nào đó không đầy đủ trong lược tả, sau đó xem xét sử dụng đối tượng dùng chung để chuyển tiếp tin nhắn tới các đối tượng (trong ứng dụng của bạn) cần cập nhật.
lý do: có thể là, táo đã tối ưu hóa việc triển khai, vì vậy bạn không phải làm như vậy.
cuối cùng, tôi đã phá vỡ các nguyên tắc này trong một ứng dụng yêu cầu một tấn yêu cầu vị trí và hiển thị một tấn thông tin vị trí. ứng dụng đã sử dụng một số dữ liệu tĩnh sau một giao diện lưu trữ trình quản lý vị trí và vị trí (trong số những thứ khác). vì vậy tôi đã kết thúc bằng cách sử dụng dữ liệu tĩnh với dữ liệu tĩnh riêng (ẩn) để giảm thiểu nhu cầu bộ nhớ và cpu trong trường hợp này.
App Delegate là nơi tốt, trung tâm cho dữ liệu đó. Bạn luôn có thể truy cập vào ứng dụng ủy quyền với [[UIApplication sharedApplication] delegate]
Tôi không đồng ý với John, AppDelegate là cách "dễ dàng" để thực hiện, nhưng không phải lúc nào cũng tốt hơn.
Tôi sẽ làm điều này với một singleton. Bạn có thể xem bài viết của Matt Gallagher trên Singletons, AppDelegates and top-level data để tham khảo.
- 1. Nơi triển khai CLLocationManager
- 2. Nơi đặt mô-đun tiện ích dùng chung trong OCaml?
- 3. Nơi đặt đoạn mã trong Rails?
- 4. CLLocationManager - Tính toán tốc độ thời gian thực trên iPhone
- 5. Mã hóa cứng và mã hóa chung: Nơi vẽ đường kẻ?
- 6. Nơi đặt thông tin tín dụng nguồn mở cho một ứng dụng iPhone?
- 7. CLLocationManager startUpdatingLocation vs startMonitoringSignificantLocationChanges
- 8. Nơi đặt biến môi trường cho ứng dụng?
- 9. MKMapView và CLLocationManager
- 10. Nơi đặt tất cả mã JavaScript jQuery đó?
- 11. Pyparsing - nơi đặt mã thông báo không thể đoán trước
- 12. Mã trạng thái HTTP cho lỗi chung
- 13. Nơi đặt mã khởi tạo trong ứng dụng ASP.Net MVC?
- 14. nodeJS + jslint: nơi cài đặt cho mac OSX?
- 15. Nơi để đặt Database.SetInitializer
- 16. Nơi nào bạn đặt mã dọn dẹp cho các lớp con NSDocument?
- 17. Tại sao đại biểu CLLocationManager không nhận được gọi trong iPhone SDK 4.0?
- 18. Nơi đặt tệp .htaccess?
- 19. Thay thế cho thuộc tính "mục đích" của CLLocationManager
- 20. iPhone: Nơi NSUserDefaults được lưu trữ?
- 21. Nơi đặt tài nguyên?
- 22. iphone CLLocationmanager Khu vực giám sát callbacks không được kích hoạt
- 23. Cài đặt gói cho ứng dụng iPhone
- 24. Tại sao đại biểu CLLocationmanager của tôi không được gọi?
- 25. Nơi đặt tệp thuộc tính?
- 26. đặt nền trong suốt cho UILabel cho ứng dụng iphone
- 27. Mã hóa chuỗi chung
- 28. Nơi tìm mã nguồn cho các phương thức gốc java.lang?
- 29. Nơi đặt logic nghiệp vụ trong Symfony2?
- 30. Làm thế nào để chỉ định một chung chung với một nơi?
Tôi không đồng ý với việc sử dụng đơn. Tôi coi những người độc thân là xấu như các biến toàn cục, nay, chúng * là * các biến toàn cầu, và tránh chúng càng nhiều càng tốt. Tôi nhận được đối số "AppDelegate big-ball-of-mud", nhưng sẽ phản đối nếu AppDelegate của bạn bị quá tải, bạn có thể cần phải cấu trúc lại. Tìm kiếm nhanh SO cho thấy tôi [không] (http://stackoverflow.com/questions/228164/on-design-patterns-when-to-use-the-singleton/228380#228380) [một mình] (http : //stackoverflow.com/questions/11831/singletons-good-design-or-a-crutch) giữ quan điểm này. –
AppDelegate chính nó là một singleton. Nó chỉ là vấn đề đóng gói. Các singletons khác nhau cho các nhiệm vụ khác nhau. Bạn phải tránh chúng khi bạn có thể, nhưng đôi khi chúng là cần thiết. Có cách nào tốt hơn để tạo các lớp như NSFileManager, NSUserDefaults ngoài các lớp đơn? Truy cập chúng thông qua AppDelegate? Tôi không nghĩ vậy. – gcamp
AppDelegate thuộc sở hữu của UIApplication, đối tượng gốc cho toàn bộ ứng dụng và (trong chế độ xem thuần túy) chỉ cho phép một singleton hợp lệ. –