2013-03-25 27 views
31

Xin lỗi tôi là một nhà phát triển iOS mới, gần đây tôi đã nghe nói rằng @synthesize hiện đang @synthesize trong một phiên bản nhất định của Xcode và trình biên dịch sẽ tự động tổng hợp và các thuộc tính và gán _ cho các biến riêng tư.Mục tiêu-C là @giải pháp hóa bắt buộc hoặc tùy chọn?

Tôi đã thử nghiệm này:

với @synthesize ra, bạn có thể truy cập vào tài sản và lĩnh vực tư nhân sử dụng

self.property_name = something; 
_property_name = something; //(used in getter and setters) 

với @synthesize property_name, bạn có thể truy cập vào tài sản và lĩnh vực tư nhân sử dụng

self.property_name = something; 
property_name = something; 

Câu hỏi của tôi là chúng ta có thực sự cần @synthesize nữa không? hoặc có một câu chuyện lớn hơn tôi đang thiếu?

+1

tùy chọn. –

+1

phiên bản mới nhất của trình biên dịch sẽ đưa vào 'tổng hợp' cho bạn nếu bạn để nó trong hầu hết các trường hợp. Tôi vừa viết về các thuộc tính ở đây: http://stackoverflow.com/questions/15493882/need-assistance-regarding-objective-c-properties-concept/15494036#15494036 – nielsbot

+1

Xem http://stackoverflow.com/questions/11666008/ tự động-tổng hợp-thuộc tính-in-xcode-4-4 – rmaddy

Trả lời

51

Không, chúng tôi không cần phải làm điều đó như của Xcode 4.4, đã thêm một tính năng gọi là Tổng hợp mặc định thuộc tính.

một cách đơn giản, nó tạo ra điều này tự động:

@synthesize name = _name; 
+14

Lưu ý: Nếu bạn ghi đè tất cả các phương thức được tạo tự động, dòng này sẽ không được tạo tự động (nhưng bạn vẫn có thể tự viết nó để nhận biến). Ngoài ra, các thuộc tính được định nghĩa trong các giao thức sẽ không được tự động tổng hợp (thay vào đó bạn sẽ nhận được một cảnh báo trình biên dịch). Cuối cùng, các lớp con của 'NSManagedObject' cũng có hành vi này bị vô hiệu hóa bởi vì nó phần lớn là không mong muốn. – borrrden

+3

Câu trả lời này là * quá * chỉ cần đặt. Để biết chi tiết, hãy đọc bài đăng này: [Tổng hợp tài sản tự động với Xcode 4.4] (http://useyourloaf.com/blog/2012/08/01/property-synthesis-with-xcode-4-dot-4.html) –

+2

Loại khác Caveat: Nếu bạn đã khai báo các thuộc tính trong một giao thức, chúng sẽ cần tổng hợp. –

-3

Trừ khi bạn đã sử dụng nó như tôi có, sau đó bạn vẫn cần đến nó, như xa như tôi có thể nói:

trong .h :

@property int32_t FwdID; 

trong .m:

@synthesize FwdID; 
.210

việc sử dụng bên lớp:

FwdID = 0; 

Từ những gì tôi có thể nói, nếu bạn muốn mặc định làm việc cho bạn, bạn sẽ phải gõ _FwdID = 0; trong mã, trông có vẻ xấu với tôi.

Vì vậy, nếu bạn giống như tôi (phá vỡ tất cả các quy ước mã hóa chuẩn mà tôi giả định), bạn vẫn sẽ cần phải sử dụng tổng hợp.

+0

Bạn nên truy cập vào các thuộc tính thông qua getters và setters '[self setFwdID: 0];', nếu không thì sử dụng một biến cá thể thực và không phải là thuộc tính. –

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