2012-05-13 28 views
6

thể trùng lặp:
Is this a new way to define private instance variables in Objective-C?Trong mục tiêu-C, chúng ta có thể đặt các biến cá thể trong phần @implementation?

Tôi có luôn đặt các biến Ví dụ trong file giao diện .h, nhưng chỉ thấy một số mã làm điều này:

@implementation Fraction { 
    int numerator; 
    int denominator; 
} 

đó là để di chuyển các biến mẫu đến phía thực hiện. Nó cũng hoạt động, nhưng vì khi nào chúng ta có thể làm điều đó (hoặc chúng ta có thể làm điều đó với Objective-C), và tôi cho rằng nó tốt hơn vì các biến cá thể chúng ta sử dụng không thực sự là một phần của giao diện.

+7

Bạn có thể thích [NÀY] (http://stackoverflow.com/questions/10407848/is-this-a-new-way-to-define-private-instance-variables- trong mục tiêu-c). – Kjuly

+3

Có vẻ như đây là [mới cho trình biên dịch LLVM] (http://stackoverflow.com/a/8015986/77939). Tôi khuyên bạn nên chống lại điều này nếu bạn muốn mã của bạn được di động. Mở rộng – mpontillo

Trả lời

2

Vâng, đó là cách ưa thích và theo cách tương tự, chúng tôi sử dụng Lớp mở rộng để xác định các thuộc tính riêng tư để ẩn quyền truy cập công khai.

Something như -

//Class Extension for private properties and methods 
@interface Fraction() 

@property (nonatomic, assign) int numerator; 

@end 

// Define private instance variable 
@implementation Fraction { 
    int numerator; 
    int denominator; 
} 

// Synthesize properties for generation of getter and setter 
@synthesize numerator = _numerator; 


@end 
+0

cũng có thể xác định các biến mẫu – user102008

0

Chức năng này đã có sẵn trong Objective-C. Mục đích chính của chức năng này là Ẩn dữ liệu hoặc Bảo mật dữ liệu.

Nếu bạn muốn sử dụng một số biến riêng tư không thể truy cập bên ngoài lớp thì bạn có thể đi với danh mục .m cụ thể.

Ngay cả trong XCode 4.3.2, khi bạn tạo một lớp mới thì tệp .m theo mặc định chứa một danh mục trong đó. (ngay trước khi thực hiện).

ViewController.m 

**@interface ViewController() 
@end** 


@implementation ViewController ....... 

Trong giao diện đó, bạn có thể khai báo thành viên riêng tư của mình ở đó. Và bạn có thể sử dụng chúng chỉ đơn giản với [self variableName] trong toàn bộ tệp .m của bạn.

Cùng một cách bạn có thể khai báo các phương pháp riêng tư của mình trong cùng một danh mục.

Vì vậy đối tượng thể hiện của bạn được tạo bên ngoài tệp lớp không thể đọc các biến và phương thức này.

Hy vọng đây là những gì bạn đang tìm kiếm.

Thưởng thức Mã hóa :)

+1

Về mặt kỹ thuật, '()' đánh dấu một phần mở rộng của lớp, không phải là một thể loại. – echristopherson

+0

Có bạn đúng nhưng mở rộng nội bộ một loại chỉ. Sự khác biệt duy nhất là - các phương thức mà chúng khai báo phải được thực hiện trong khối @implementation chính cho lớp tương ứng. Các danh mục cụ thể được khai báo với() không có tên phụ nào được gọi là Tiện ích mở rộng. – Mrunal

+0

Mục tiêu của tôi là giải quyết vấn đề được nhắc đến ở đó trong câu hỏi và tôi đoán chức năng Danh mục/Mở rộng này là giải pháp tốt hơn cho điều đó. – Mrunal

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