1) Lệnh return có lẽ chỉ có bởi vì trình biên dịch không biết rằng chức năng không bao giờ có thể trở lại (nó không phải là được đánh dấu theo bất kỳ cách đặc biệt nào, sau khi tất cả). Vì vậy, phân tích luồng mã của trình biên dịch sẽ cảnh báo rằng nó có một câu lệnh trả về bị thiếu. Điều đó vẫn không giải thích tại sao UIApplicationMain() có một giá trị trả về. Có thể có một tình huống lỗi khi nó thực sự là có thể trả lại, ai biết được.
2) Tôi nghĩ rằng có một hồ bơi autorelease trong chính() xung quanh UIApplicationMain là sai, vì bất kỳ đối tượng được phát hành mà không có một hồ bơi sẽ kết thúc trong hồ bơi autorelease này, mà vẫn tồn tại trong suốt thời gian của ứng dụng. Vì vậy, hiệu quả đối tượng vẫn còn bị rò rỉ.
Thông thường, nếu không có sẵn bể tự động, thời gian chạy sẽ ghi lại thông báo lỗi về hồ bơi bị thiếu và yêu cầu nhà phát triển đặt điểm ngắt trên _NSAutoreleaseNoPool để tìm nơi tự động phát hiện ít xảy ra. Các NSAutoreleasePool cấp cao nhất được tìm thấy trong các mẫu như vậy thực sự là giấu rò rỉ này từ người dùng.
UIApplicationMain() nên xây dựng hồ bơi tự động của riêng mình khi cần thiết (Nó phải tạo và rách xuống một lần một lần thông qua vòng lặp sự kiện, nếu không các đối tượng sẽ chỉ thêm vào trong hồ bơi bên ngoài, tiêu thụ tất cả bộ nhớ). Nếu ai đó nghĩ rằng họ thực sự cần chạy mã ObjC trước khi gọi UIApplicationMain() (và họ không thể làm công việc tương tự trong applicationDidFinishLaunching: hoặc thích), họ luôn có thể tạo một hồ bơi trước UIApplicationMain(). Vì UIApplicationMain() được ghi lại để không bao giờ trở lại (như exit()), không có điểm nào trong việc có các lệnh theo sau nó. Các hồ bơi sẽ không bao giờ được phát hành.
Nếu bạn nhìn vào các mẫu Mac, chúng thực sự không có hồ bơi.
3) Các tham số được sử dụng ngay cả khi bạn bấm đúp vào một ứng dụng trên máy Mac. Hệ điều hành chuyển thông tin nhất định đến ứng dụng theo cách đó. Tham số đầu tiên là đường dẫn đến tệp thực thi khi nó được khởi chạy, đó là cần thiết để tìm các tệp trong gói, tôi giả sử.Trên máy Mac, PSN (số sêri xử lý) cũng được chuyển đến một ứng dụng dưới dạng tham số khi được khởi chạy từ Trình tìm kiếm:
05.07.11 22:18:54,129 [0x0-0x21e21e].com.thevoidsoftware.MacTestApp: 0: /Volumes/RamDisk/MacTestApp-fdcuwfrzopalmgaufwujijhqhvjc/Build/Products/Debug/MacTestApp.app/Contents/MacOS/MacTestApp
05.07.11 22:18:54,129 [0x0-0x21e21e].com.thevoidsoftware.MacTestApp: 1: -psn_0_2220574
Về mẫu Mac, có thể vì chúng sử dụng bộ sưu tập rác (không phải môi trường được tính tham chiếu)? trên iOS, chúng tôi không có nó. –
@Cyril Godefroy chỉ các nhà phát triển lười biếng sử dụng bộ sưu tập rác và nó không được kích hoạt theo mặc định. Tôi ghét nó, nhưng đó là ý kiến của tôi. –
Bạn có thể trả lời câu hỏi đó cho chính mình nếu bạn có quyền truy cập vào phần mềm tiền phát hành. Tôi không thể nói nhiều hơn. – uliwitness