2010-07-07 34 views
5

Khi nào tôi nên sử dụng nguyên thủy trong Mục tiêu-C thay vì NSValue các lớp con? Mã này chắc chắn là sạch hơn (tôi nghĩ) so với sử dụng NSNumber:Khi nào sử dụng nguyên thủy trong Objective-C?

float width = sliderOne.frame.size.width; 
    float totalWidth = width * 2 + 10; 

nhưng có bất kỳ hạn chế nào không? Ngoài ra, nó là chính xác mà tôi không cần phải gọi release hoặc bất cứ điều gì với nguyên thủy? Liệu bộ nhớ có được giải phóng khi họ đi ra khỏi phạm vi, sau đó?

Trả lời

4

Các loại cơ bản được ưu tiên. Chỉ sử dụng các đối tượng NSNumber và NSValue khi bạn phải truyền chúng như một đối tượng.

Hạn chế duy nhất đối với các kiểu nguyên thủy là bạn không thể chuyển chúng dưới dạng đối tượng.

Loại nguyên thủy có thể được cấp phát trên ngăn xếp (biến cục bộ) hoặc vùng heap (w/malloc). Đối tượng chỉ có thể được cấp phát trên heap, đó là tốn kém hơn mà phân bổ stack.

+0

Tại sao tôi quan tâm đến việc tôi không thể chuyển chúng thành đối tượng? Xin lỗi nếu đó là một câu hỏi ngớ ngẩn đến từ một vũ trụ hộp số tự động. –

+1

Nếu bạn muốn gọi một API lấy một đối tượng NSNumber làm tham số hoặc lưu trữ chúng trong một NSArray hoặc NSDictionary thì nó phải là một đối tượng. – progrmr

+1

Tôi muốn nói các loại * scalar * cơ bản được ưu tiên. Nó có những trường hợp khá đặc biệt cho một mảng C hoặc chuỗi C để được ưa thích hơn một NSArray hoặc NSString. – Chuck

0

Bất cứ điều gì thuận tiện hơn cho bạn để sử dụng trong mã của riêng bạn, nhưng thông thường bạn sẽ sử dụng NSwhatever khi nó cần được chuyển đến một số API.

2

Hạn chế chính của việc sử dụng các kiểu nguyên thủy là bạn không thể lưu trữ chúng trong NSArray.

+2

Hoặc bất kỳ đối tượng thu thập Cocoa nào – JeremyP

+0

thực sự, gọi tốt – blu

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