2010-10-25 24 views
7

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

1

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.

-3

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]

5

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.

+0

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. –

+2

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

+0

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ệ. –

Các vấn đề liên quan