Video: Shyam Sankar: The rise of human-computer cooperation 2025
Bởi Karl G. Kowalski
Sự phát triển ứng dụng của Macintosh đòi hỏi sự sáng tạo, kỹ năng lập trình C, sự kiên nhẫn, và giúp đỡ kiên trì thực hiện, và cung cấp ứng dụng Macintosh của bạn để làm việc tốt cho người dùng của bạn. Trên đường đến điểm đến này, bạn sẽ gặp một số thách thức sẽ kiểm tra các kỹ năng lập trình và giải quyết vấn đề của bạn. Bạn phải gặp gỡ (trong số những thứ khác) sử dụng các đại biểu để thực hiện gọi lại ứng dụng; sử dụng các khuôn khổ không Mục tiêu-C từ Apple; và kết hợp mã C ++ vào ứng dụng của bạn.
Thực hiện gọi lại trong các ứng dụng Macintosh
Việc phát triển ứng dụng Macintosh sử dụng gọi lại để cho phép Mac OS X thực thi mã trong ứng dụng của bạn cho các hoạt động cụ thể. Nếu bạn đang tạo một ứng dụng Macintosh dựa trên tài liệu hoặc dựa trên tài liệu, mã đầu tiên mà OS X sẽ thực hiện là một trong những cách gọi lại sau bạn phải tạo cho ứng dụng của mình, tùy thuộc vào thiết kế ứng dụng:
Các ứng dụng dựa trên tài liệu: (void) windowControllerDidLoadNib: (NSWindowController *) windowController
Một callback chỉ đơn giản là một phương pháp mà hệ điều hành cuối cùng sẽ thực hiện trong khi nó đang cố cung cấp hoặc lấy thông tin từ ứng dụng của bạn. Mã ứng dụng của bạn sẽ thực hiện một phương pháp cho lớp Cocoa nơi mà ứng dụng của bạn sẽ có cơ hội cung cấp tên của một phương pháp của một trong các lớp của bạn, được gọi là đối tượng của lớp mà ứng dụng của bạn cũng sẽ phải cung cấp.
delegate
là một đối tượng trợ giúp, lớp Cocoa sử dụng để mở rộng chức năng của lớp bằng cách cho phép bạn thực hiện mã mà lớp Cocoa sẽ thực hiện trong một số trường hợp nhất định. Lớp Cocoa kiểm tra đối tượng delegate của nó (nếu đã được gán) cho phép delegate cung cấp sự thực hiện một phương thức cụ thể. Nếu delegate có phương pháp đó, lớp Cocoa thực hiện phương pháp đó; nếu delegate không thực hiện phương pháp cụ thể đó, lớp Cocoa hoặc sử dụng một phương pháp mặc định của riêng nó hoặc ghi lại một lỗi. Hầu hết các đại biểu phải kết hợp một giao thức đặc biệt để xác định phương pháp nào họ có thể thực hiện; các delegate của mã của bạn phải sử dụng các phương thức thực thi từ giao thức cụ thể mà delegate mong đợi. Dưới đây là một số đối tượng Cocoa có thể sử dụng các đại biểu để thực thi mã của bạn: NSTableView.NSTableView chấp nhận một delegate tuân theo giao thức NSTableViewDelegate. Điều này bao gồm từ 20 đến 30 phương pháp mà đối tượng delegate của ứng dụng của bạn có thể triển khai để hỗ trợ ứng dụng của bạn cần phải biết NSTableView đang làm gì. Có những phương pháp sẽ được gọi trong ứng dụng của bạn khi nó cần biết và phản ứng với một hành động, chẳng hạn như khi người dùng tạo một lựa chọn trong bảng hoặc khi một cột được thay đổi kích thước.
NSApplication. Bạn có thể chỉ định một NSApplicationDelegate để xử lý một số phương pháp mà một thể hiện của NSApplication (ứng dụng của bạn) sẽ nhận được. Các phương pháp này có thể được gọi ngay trước hoặc ngay sau khi ứng dụng của bạn thi hành một phương pháp khác để ứng dụng của bạn có thể được chuẩn bị.
-
NSWindow. Một NSWindowDelegate được gán cho một trong các cửa sổ ứng dụng của bạn sẽ cấp cho ứng dụng của bạn cơ hội phản hồi lại cho người dùng thay đổi kích thước, di chuyển hoặc các sự kiện cửa sổ khác.
-
NSMenu. Bạn thực hiện một NSMenuDelegate để hỗ trợ các sự kiện xảy ra khi người dùng tương tác với các trình đơn trong ứng dụng của bạn.
-
Khung Mục tiêu Không C-Mục tiêu trong Ứng dụng Macintosh
-
Apple cung cấp nhiều khuôn khổ phát triển ứng dụng Macintosh (thư viện mã) mà ứng dụng của bạn có thể gọi để thực hiện hàng ngàn thao tác trong OS X. Nhiều trong số các khuôn khổ này, chẳng hạn như PDF Kit gồm các lớp Objective-C, từ đó ứng dụng của bạn có thể tạo và sử dụng các đối tượng trong ứng dụng của bạn. Tuy nhiên, một số trong các khuôn khổ này chỉ là thư viện các chức năng mà ứng dụng của bạn có thể thực hiện.
Chẳng hạn, khung công tác CFNetwork là một bộ các chức năng mà ứng dụng của bạn có thể sử dụng để thực hiện các kết nối mạng tinh chỉnh. Lớp NSURL cung cấp một bộ các hoạt động mạng cơ bản rất tốt cho việc truy xuất dữ liệu bằng cách sử dụng một URL. Nếu ứng dụng của bạn yêu cầu kiểm soát nhiều hơn các thông tin liên lạc mạng mà nó khởi tạo, bạn sẽ phải sử dụng khung công việc CFNetwork và các chức năng của nó. Bạn có thể sử dụng mã sau đây để chuẩn bị một yêu cầu HTTP cho việc truyền đến một URL cụ thể:
CFStringRef httpBody = CFSTR ("); CFStringRef headerFieldName = CFSTR (" Cookie "); // thêm cookie cụ thể vào yêu cầu HTTP CFStringRef headerFieldValue = CFSTR ("loginID = my_user_name; password = my_password;"), CFStringRef url = CFSTR ("www diabeticpad. Com"), CFURLRef urlRef = CFURLCreateWithStrign (kCFAllocatorDefault, url, NULL); CFStringRef requestMethod = CFSTR ("GET"); CFHTTPMessageRef yêu cầu = CFHTTPMessageCreateRequest (kCFAllocatorDefault, requestMethod, url, kCFHTTPVersion1_1); CFHTTPMessageSetBody (yêu cầu, httpBody); // thêm CFHTTPMessageSetHeaderFieldValue cookie (yêu cầu, headerFieldName, headerFieldValue); CFDataRef serializedHttpRequest = CFHTTPMessageCopySerializedMessage (theo yêu cầu);
Một khi mã của bạn có yêu cầu serialized, ứng dụng của bạn sau đó có thể mở một luồng ghi để cung cấp các yêu cầu đến đích của nó.
Tất cả các khuôn khổ dựa trên Apple C cung cấp một tập hợp các chức năng để thực hiện loại chương trình cấp thấp này. Mã của bạn sẽ phức tạp hơn, nhưng Apple không cung cấp các lớp Objective-C cho tất cả các khuôn khổ của nó.Nếu bạn thực sự yêu cầu chức năng có sẵn trong một trong những khuôn khổ đó, đây là cách duy nhất bạn có thể đạt được mục tiêu của ứng dụng. Các khung công tác sau đây không cung cấp các lớp Objective-C:
Hộp công cụ Audio
CFNetwork
-
Core MIDI
-
Core Text
-
Dịch vụ Thư mục (như LDAP và Open Directory)
-
An ninh > Nếu bạn muốn tạo các ứng dụng có thể khai thác tối đa các tính năng của OS X, bạn cần phải sẵn sàng để hỗ trợ việc sử dụng các thư viện mã không phải là Objective-C.
-
Mã C ++ trong các ứng dụng Macintosh Mục tiêu-C
-
Mục tiêu-C cung cấp các tính năng hướng đối tượng cho việc phát triển ứng dụng Macintosh, chẳng hạn như thừa kế và đa hình. Ngôn ngữ được dựa trên ngôn ngữ lập trình C; do đó, bạn có thể sử dụng kiến thức lập trình C của bạn để mã trong Mục tiêu-C. Mục tiêu-C ++ là một cơ chế cầu nối cho phép các mô-đun nguồn Objective-C làm việc với các lớp Objective-C ++, có thể biên dịch và liên kết với các thư viện mã C ++.
Ví dụ đơn giản sau của một ma trận vuông hiển thị nội dung của tệp tin tiêu đề C ++ cho một lớp Ma trận. Lớp Matrix đi kèm với hàm xây dựng tiêu chuẩn và destructor cho một lớp C ++, và các phương thức là những gì bạn mong đợi cho một đối tượng ma trận vuông cơ bản:
lớp Matrix {public: Matrix (int inSize); ảo ~ Matrix (); int getSize (void); int getDeterminant (void); void setElement (int inRow, int intCol, int inValue); int getElement (int inRow, int intCol); Toán tử ma trận + (const Matrix & inAddend); riêng tư: int m_size; int [] [] m_elements;};
Để sử dụng Objective-C ++, các mô-đun Objective-C ++ của bạn phải sử dụng phần mở rộng của tệp tin. mm. Điều này cho trình biên dịch của Xcode biết rằng lớp này được biên dịch bằng cách sử dụng Objective-C ++, cho phép lớp của bạn sử dụng các từ khóa ngôn ngữ C ++. Sử dụng Objective-C ++, ứng dụng của bạn có thể tạo ra một đối tượng Matrix để thực hiện các thao tác cơ bản, như thêm hai đối tượng Ma trận vào nhau. Điều này giả định mô-đun nguồn Objective-C ++ đã #imported C ++ Matrix. h file:
- (void) addTwoMatrices {Matrix matrixOne (3); // ma trận ma trận 3x3 Matrix matrixTwo (3); // int rowIndex khác = 0; int colIndex = 0; cho rowIndex = 0; rowIndex <3; ++ rowIndex) {for (colIndex = 0; colIndex <3; ++ colIndex) {// đặt các phần tử của ma trận vào các giá trị của chúng matrixOne. setElement (rowIndex, colIndex, XXX); / / thiết lập ma trận của hai yếu tố cho một số các giá trị khác matrixTwo. setElement (rowIndex, colIndex, YYY);}} ma trận ma trậnSum = ma trậnMột ma trận + ma trận2;
Với Objective-C ++, ứng dụng của bạn có thể tận dụng tất cả các thư viện hiện có của bên thứ ba viết cho C ++.