2013-02-28 20 views
5

Tôi khá mới với Objective C và iOS, hiện đang cố gắng tìm hiểu phát triển ứng dụng bằng SDK iOS 6. Một khái niệm tôi thực sự không thể quấn quanh đầu của tôi là sự khác biệt giữa "_variable" và "self.variable" khi được truy cập trong tệp .m. Họ có giống nhau không? Hoặc khác nhau?Sự khác biệt giữa _variable & self.variable trong Objective-C là gì?

Sau đây là một mẫu đơn giản

MyClass.h

#import <Foundation/Foundation.h> 

@interface MyClass : NSObject 
@property (strong, nonatomic) NSString *myName; 
@end 

MyClass.m

#import "MyClass.h" 

@interface MyClass() 
@property (nonatomic, strong) NSString *anotherName; 
@end 

@implementation MyClass 
- (void) myFunction { 
    _myName = @"Ares"; 
    self.myName = @"Ares"; 

    _anotherName = @"Michael"; 
    self.anotherName = @"Michael"; 
} 
@end 

Vậy là có một sự khác biệt trong việc triển khai ở trên để thiết lập một biến? Biến "myName" là Công khai trong khi "anotherName" là Riêng tư.

Rất cảm kích mọi yếu tố đầu vào. Cảm ơn!

+2

có thể trùng lặp của [Sự khác biệt giữa self.ivar và ivar?] (Http://stackoverflow.com/q/4142177/), [Sự khác biệt giữa biến tự và biến bình thường] (http://stackoverflow.com/q/ 536388 /), [Thuộc tính và accessors] (http://stackoverflow.com/q/6085080/), [Ivar tài sản, truy cập thông qua tự?] (Http://stackoverflow.com/q/4088801/), [Khi nào truy cập các thuộc tính với self] (http://stackoverflow.com/q/4271657/), [Sự khác biệt (phong cách) giữa "self.foo" và "foo" khi sử dụng getters tổng hợp là gì?] (Http: //stackoverflow.com/q/3494157/) và [nhiều hơn nữa] (http://stackoverflow.com/search?q=%5Bobjc%5D+self.ivar) –

+2

Thực ra câu hỏi này không trùng lặp. Là người mới bắt đầu, tôi đã tìm kiếm sự khác biệt giữa _variable và self.variable. Tôi sẽ bỏ qua những câu hỏi không sử dụng dấu gạch dưới, vì vậy đây là câu hỏi duy nhất cho tôi. Nhưng, @Josh, bình luận của bạn đã giúp tôi dù sao, để hiểu họ cũng giống nhau. – Arjan

+0

Dấu gạch dưới không thay đổi bản chất hoặc chức năng của ivars một chút: [Làm cách nào để gạch dưới trước biến trong lớp học Cocoa/ObjC?] (Http://stackoverflow.com/q/822487) –

Trả lời

13

Sự khác biệt là:

tên biến với _ là các biến mẫu.

self.variable đang gọi phương thức getter trên đối tượng của bạn.

Trong ví dụ của bạn, các biến cá thể được tạo tự động và bạn không cần phải tổng hợp các thuộc tính của mình.

Sự khác biệt quan trọng thực trong ví dụ của bạn đến chơi nếu bạn không sử dụng ARC-

self.variable sẽ giữ một đối tượng dành cho bạn nếu bạn đánh dấu tài sản với retain hoặc strong _variable không đề cập đến quản lý bộ nhớ ở tất cả

+0

Sử dụng niềng răng trong ví dụ của bạn có khả năng gây nhầm lẫn cho người mới bắt đầu! Tôi muốn gắn bó với 'self.variableName' – jrturton

+1

Bạn có thể giải thích câu cuối cùng của mình không? "' self.variable' sẽ giữ lại một đối tượng cho bạn nếu bạn đánh dấu thuộc tính với 'retain' hoặc' strong' '_variable' không giải quyết được việc quản lý bộ nhớ" – alternatiph

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