Tôi đang học mục tiêu-c và tiếp tục va vào biểu tượng @. Nó được sử dụng trong các kịch bản khác nhau, ví dụ khi bắt đầu một chuỗi hoặc để tổng hợp các phương thức truy cập.
Biểu tượng @ có ý nghĩa gì trong mục tiêu-c?
Tôi đang học mục tiêu-c và tiếp tục va vào biểu tượng @. Nó được sử dụng trong các kịch bản khác nhau, ví dụ khi bắt đầu một chuỗi hoặc để tổng hợp các phương thức truy cập.
Biểu tượng @ có ý nghĩa gì trong mục tiêu-c?
Câu trả lời:
Ký @
tự này không được sử dụng trong các định danh C hoặc C ++, do đó, nó được sử dụng để giới thiệu các từ khóa ngôn ngữ Objective-C theo cách không xung đột với các từ khóa của các ngôn ngữ khác. Điều này cho phép phần "Mục tiêu" của ngôn ngữ có thể tự do xen kẽ với phần C hoặc C ++.
Do đó, với rất ít ngoại lệ, bất cứ khi nào bạn nhìn thấy @
trong một số mã Objective-C, bạn đang xem các cấu trúc Objective-C thay vì các cấu trúc C hoặc C ++.
Các trường hợp ngoại lệ chính là id
, Class
, nil
, và Nil
, thường được coi là từ khóa ngôn ngữ mặc dù họ cũng có thể có một typedef
hoặc #define
phía sau họ. Ví dụ, trình biên dịch thực sự xử lý id
đặc biệt theo các quy tắc chuyển đổi loại con trỏ mà nó áp dụng cho các khai báo, cũng như quyết định có tạo ra các rào cản ghi GC hay không.
Trường hợp ngoại lệ khác in
, out
, inout
, oneway
, byref
, và bycopy
; chúng được sử dụng như các chú thích lớp lưu trữ trên tham số phương thức và các kiểu trả về để làm cho các Đối tượng phân tán hiệu quả hơn. (Họ trở thành một phần của chữ ký phương pháp có sẵn từ thời gian chạy, mà DO có thể nhìn vào để xác định làm thế nào để sắp đặt tốt nhất một giao dịch.) Ngoài ra còn có các thuộc tính trong @property
tờ khai, copy
, retain
, assign
, readonly
, readwrite
, nonatomic
, getter
, và setter
; những cái đó chỉ hợp lệ trong phần thuộc tính của một @property
tuyên bố.
@
.
@
tự này không được sử dụng bởi C, do đó, đây là một lối thoát hatch tiện lợi cho việc phân tích cú pháp thay thế cũng bảo tồn 100% khả năng tương thích với mã C hiện có.
Từ Hướng dẫn Mục tiêu-C: Biểu tượng @ , lý do nó nằm ở mặt trước của các từ khóa khác nhau:
Việc sử dụng @ sẽ giúp việc biên dịch trình biên dịch Objective-C trở nên dễ dàng hơn với trình biên dịch C hiện có. Vì @ không hợp lệ trong bất kỳ ngữ cảnh nào trong C ngoại trừ một chuỗi ký tự, mã thông báo (bước đầu tiên và đơn giản trong trình biên dịch) có thể được sửa đổi để chỉ cần tìm ký tự @ bên ngoài hằng số chuỗi (mã thông báo hiểu được chuỗi ký tự chuỗi , vì vậy nó ở một vị trí để phân biệt điều này). Khi gặp @, mã thông báo sẽ đặt phần còn lại của trình biên dịch vào "Chế độ Objective-C." (Trình phân tích cú pháp Objective-C sẽ chịu trách nhiệm đưa trình biên dịch trở lại chế độ C thông thường khi phát hiện kết thúc mã Objective-C).
Ngoài ra, khi được nhìn thấy trước một chuỗi ký tự, nó tạo ra một NSString chứ không phải là một 'char *' trong C.
Từ Macrumors: Objective-C Tutorial , khi đứng trước chuỗi ký tự:
Ngoài ra còn có chữ "NSString". Nó chủ yếu là viết tắt cho phương thức + stringWithUTF8String của NSString.
@ Cũng thêm hỗ trợ unicode cho chuỗi C.
Từ hướng dẫn :
Các khung Objective-C thường không sử dụng các chuỗi kiểu C. Thay vào đó, chúng truyền các chuỗi xung quanh dưới dạng các đối tượng NSString.
Lớp NSString cung cấp trình bao bọc đối tượng cho các chuỗi có tất cả các lợi thế mà bạn mong đợi, bao gồm quản lý bộ nhớ tích hợp để lưu trữ các chuỗi có độ dài tùy ý, hỗ trợ Unicode, các tiện ích định dạng kiểu printf, v.v. Do các chuỗi như vậy được sử dụng phổ biến mặc dù, Objective-C cung cấp một ký hiệu tốc ký để tạo các đối tượng NSString từ các giá trị không đổi. Để sử dụng tốc ký này, tất cả những gì bạn phải làm là đặt trước một chuỗi trích dẫn kép, bình thường có ký hiệu @, như trong các ví dụ sau:
NSString *myString = @"My String\n"; NSString *anotherString = [NSString stringWithFormat:@"%d %@", 1, @"String"];
@
được sử dụng. Tôi đang xem mã như thế này: mapperOptions = @{ kSTMapperVolumeResolutionKey: @(volumeResolution),
... không có gì để làm với NSString