2010-01-01 44 views
7

Tôi có một cấp độ int được xác định trong tệp tiêu đề của tôi. Trong tệp .m, tôi có một phương thức mà tôi muốn lấy tham số int, sửa đổi nó và có giá trị sửa đổi được phản ánh tại người gọi. Ví dụ:Gửi số nguyên theo tham chiếu

classLevelInt = 2; 
[self someMethod:classLevelInt]; 

//Here, I'd like classLevelInt to equal the value assigned to it in the method 

Trong -someMethod:

- (void)someMethod:(int)anInt{ 
//do some stuff 
if(somecondition){ 
    anInt = 2 + 3; //some operation 
} 
} 

Tôi đã thử sử dụng một

  • NSNumber
  • Pointer của một con trỏ (**)
  • Chuyển đổi int với NSNumber bên trong phương pháp, dẫn đến một không gian địa chỉ mới

nhưng không bao giờ thấy giá trị được đặt bên trong phương thức cho classLevelInt được phản ánh bên ngoài phương thức đó. Không trả về giá trị int mới từ -someMethod, làm thế nào tôi có thể có giá trị classLevelInt bảo toàn bên ngoài phương thức? Hoặc, nếu đó chỉ đơn giản là không phải là một cách tiếp cận tốt, một cách tốt hơn là gì?

Trả lời

14

Bạn có thể chuyển con trỏ đến classLevelInt làm int*.

classLevelInt = 2; 
[self someMethod:&classLevelInt]; 

- (void)someMethod:(int*)anInt { 
    //do some stuff 
    if(somecondition){ 
    *anInt = 2 + 3; //some operation 
    } 
} 

Cách thứ hai, bạn có thể trực tiếp thay đổi classLevelInt trong cùng một lớp.

- (void)someMethod { 
    //do some stuff 
    if(somecondition){ 
    classLevelInt = 2 + 3; //some operation 
    } 
} 
+0

Chỉ cần trả lời cùng một điều. câu trả lời chính xác! –

+0

Yêu cầu dereference con trỏ. Bạn sử dụng cú pháp như thế nào (int &) anInt? – jjxtra

8

iamamac là đúng, nhưng bạn cũng hỏi nếu có một cách tốt hơn.

Nếu có thể, chỉ cần trả lại giá trị trực tiếp. Việc tham chiếu qua đường thường gây ra một chút "mùi mã" của loại khó chịu.

Nếu bạn cần trả lại nhiều int, có thể bạn thực sự nên tạo cấu trúc hoặc lớp để đóng gói dữ liệu.

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