2010-04-22 38 views
5

Tôi muốn thực hiện một phương pháp lấy CGFloat bằng cách tham khảo.Làm thế nào để vượt qua và thiết lập một CGFloat bằng cách tham khảo?

Tôi có thể làm điều gì đó như thế này không?

- (void)doStuff:(CGFloat*)floatPointer 

Tôi đoán điều này phải khác với các đối tượng khác có hai trong số các dấu sao đó. Ngoài ra, tôi không chắc liệu tôi có phải làm điều gì đó như:

- (void)doStuff:(const CGFloat*)floatPointer 

Và tất nhiên, không biết cách gán giá trị CGFloat cho floatPointer đó. Có thể &floatPointer = 5.0f;?

Ai đó có thể đưa ra một số ví dụ và giải thích những điều này? Sẽ rất tuyệt!

Trả lời

9

Objective-C vẫn là c, vì vậy

-(void) doStuff (CGFloat *) f 
{ 
    *f = 1.2; 
} 

cuộc gọi với

CGFloat f = 1.0; 
[self doStuff:&f]; 
3

Nếu bạn đang đi qua một CGFloat bằng cách tham khảo, sau đó truy cập vào nó rất đơn giản:

- (void)doStuff:(CGFloat*)floatPointer { 
    *floatPointer = 5.0f; 
} 

Giải thích: khi bạn đang nhận được một tài liệu tham khảo, bạn cần phải bỏ tham khảo con trỏ (với *) để có được hoặc đặt giá trị.

+0

Điều đó rất hữu ích. Cảm ơn. Tại sao tôi phải viết từ khóa const trước CGFloat? – dontWatchMyProfile

+0

Bạn không thể gán giá trị cho một con trỏ const ... – kennytm

+0

Từ khóa const nói: "Tôi chuyển cho bạn tham chiếu đến nhưng bạn không được phép sửa đổi nó". –

2

nếu bạn (con trỏ ghét và ;-) thích Objective-C++ vượt qua bằng cách tham khảo, sau đây là một sự thay thế :

-(void) doStuffPlusPlus:(CGFloat &) f 
{ 
    f = 1.3; 
} 

cuộc gọi bằng cách

CGFloat abc = 1.0; 
[self doStuffPlusPlus:abc]; 

và, bạn cần đổi tên tên tệp nguồn từ ??? .m thành ???. Mm

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