Từ documentation trên NSArray
:
NSArray là “cầu nối điện thoại miễn phí ”Với đối tác Core Foundation, Tham chiếu CFArray. Điều này có nghĩa là loại Core Foundation là có thể hoán đổi cho nhau trong các chức năng hoặc các cuộc gọi phương thức với đối tượng Foundation cầu nối, cung cấp cho bạn một loại khác. Vì vậy, trong một API mà bạn nhìn thấy một tham số NSArray *, bạn có thể vượt qua trong một CFArrayRef, và trong một API, nơi bạn nhìn thấy một tham số CFArrayRef , bạn có thể vượt qua trong một trường hợp NSArray. Sự sắp xếp này cũng áp dụng cho các lớp con cụ thể của NSArray.
Vì vậy, vấn đề phải bằng hai phương pháp được gọi. Một lần nữa, từ các tài liệu, CGWindowListCopyWindowInfo
có giá trị trả về:
Một mảng của các loại CFDictionaryRef, mỗi trong số đó có chứa thông tin về một trong những cửa sổ trong user session hiện hành. Nếu không có cửa sổ khớp với tiêu chí mong muốn, hàm sẽ trả về mảng trống . Nếu bạn gọi hàm này từ bên ngoài bảo mật GUI phiên hoặc khi không có máy chủ cửa sổ nào đang chạy, hàm này trả về NULL.
và CGWindowListCreate
có giá trị trả về:
Một mảng các giá trị CGWindowID tương ứng với cửa sổ mong muốn. Nếu không có cửa sổ nào khớp với tiêu chí mong muốn, hàm sẽ trả về một mảng trống. Nếu bạn gọi hàm này từ bên ngoài phiên bảo mật GUI hoặc khi không có máy chủ cửa sổ nào đang chạy, hàm trả về NULL.
Khi bạn gọi NSLog(@"%@",array);
, thông báo description
được gửi đến từng đối tượng trong mảng. Nổi, BOOL và ints không trả lời thư này. Ví dụ, bạn sẽ nhận được một lỗi cho
NSLog(@"Printing 2: %@",2);
nhưng lỗi sẽ biến mất nếu bạn sử dụng int
gọi:
NSLog(@"Printing 2: %d",2);
Đối với trường hợp của bạn, CGWindowListCreate
được trả lại một mảng của CGWindowID
giá trị, và những là các số nguyên không dấu 32 bit. Do đó, họ không trả lời %@
, nhưng sẽ trả lời %u
. Do đó sửa chữa là in mảng bằng tay sử dụng %u
.
Ah! Bây giờ có ý nghĩa là tại sao nó hoạt động giống như một mảng C và một nửa giống như một đối tượng. Cảm ơn câu trả lời. –