Từ 1 tới 4 trên tổng số 4 kết quả

Đề tài: Ý nghĩa dấu ^ trong objective-c?

  1. #1
    Ngày gia nhập
    04 2009
    Nơi ở
    /Users/richtran
    Bài viết
    103

    Mặc định Ý nghĩa dấu ^ trong objective-c?

    Code:
    [NSEvent addLocalMonitorForEventsMatchingMask:NSLeftMouseDraggedMask handler:^(NSEvent *event) {
       return (NSEvent *)nil;
    }];
    Có phải dấu ^ trong đoạn code trên là con trỏ hàm phải không?

  2. #2
    Ngày gia nhập
    12 2006
    Nơi ở
    US
    Bài viết
    1,917

    Yes, ^ là cách khai báo con trỏ hàm trong Objective C (hiểu theo C). Nó tương tự như anonymous function trong Java, hay Lambda trong C++/C# vậy, trong C++ nó cũng có thể được hiểu là predicate.

  3. #3
    Ngày gia nhập
    07 2006
    Nơi ở
    Hanoi, Vietnam
    Bài viết
    2,750

    Trong Objective C, nếu bạn sử dụng dấu ^ như trên gọi là Block (một cái tên khác gọi là Memory Block). Vấn đề này rất khó giải thích rõ ràng cho bạn (Nói chung là một memory block nếu bạn nắm vững về bộ nhớ sẽ hiểu ngay). Nếu bạn biết về lập trình C, bạn cũng có thể hiểu nó với ý nghĩa như bạn rox_rook.

    Nếu bạn sử dụng dấu ^ như trên nhưng ở dạng: a ^= b; hoặc r = a ^ b; lúc này ^ có ý nghĩa là XOR như trong lập trình C chứ không phải ý nghĩa trên!
    Email: admin[@]congdongcviet.com | CC to: info[@]congdongcviet.com
    Phone: 0972 89 7667 (Office: 04 6329 2380)
    Yahoo & Skype: dreaminess_world (Vui lòng chỉ rõ mục đích ngay khi liên hệ, cảm ơn!)

    Một người nào đó coi thường ý thức kỷ luật cũng có nghĩa là người đó đã coi thường tương lai số phận của chính bản thân người đó. Những người coi thường ý thức kỷ luật sẽ không bao giờ có được sự thành công trong sự nghiệp!

  4. #4
    Ngày gia nhập
    10 2010
    Nơi ở
    Hồ Chí Minh
    Bài viết
    49

    Dấu "^" là để khai báo 1 block, chính là 1 con trỏ hàm.
    Cách sử dụng
    - Hàm bình thường:
    Code:
    void printMessage (void) {
      NSLog (@"Programming is fun."); 
    }
    - Block giống chức năng với function trên
    Code:
    ^(void) {
      NSLog (@"Programming is fun."); 
    }
    - Block được gán vào 1 tên biến
    Code:
    void (^printMessage)(void) = ^(void){
      NSLog (@"Programming is fun."); 
    };
    - Gọi:
    Code:
    printMessage ();
    - Block gần giống như 1 hàm nên cũng có giá trị trả về:
    Code:
    int (^gcd) (int, int) = ^(int u, int v){
      int temp;
      while ( v != 0 ) {
        temp = u % v; u = v;
        v = temp;
      }
      return u; 
    };
    - Block tiện hơn hàm ở chổ có thể viết bên trong hàm, ngoài hàm, locally hoặc globally
    Code:
    #import <Foundation/Foundation.h>
    // Block to calculate the nth triangular number
    void (^calculateTriangularNumber) (int) = ^(int n) {
      int i, triangularNumber = 0;
      for ( i = 1; i <= n; ++i ) 
         triangularNumber += i; 
      NSLog (@"Triangular number %i is %i", n, triangularNumber); 
    };
    int main (int argc, char *argv[]) {
      NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
      calculateTriangularNumber (10); 
      calculateTriangularNumber (20); 
      calculateTriangularNumber (50);
      [pool drain]; 
      return 0;
    }
    - Block có thể truy nhập các biến bên trong phạm vi (scope) block được khai báo, chỉ truy nhập, không thể sửa đổi:
    Code:
    #import <Foundation/Foundation.h>
    int main (int argc, char *argv[]) {
      NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
      int foo = 10;
      void (^printFoo)(void) = ^(void) {
         NSLog (@"foo = %i", foo); };
      foo = 15; 
      printFoo ();
      [pool drain]; 
      return 0;
    }
    Cuốn programming in objective-c 2.0 nói rất rõ vấn đề này.
    Bạn nên tìm đọc để hiểu rõ hơn.
    Chúc thành công.

Các đề tài tương tự

  1. Cách ép kiểu trong Objective C?
    Gửi bởi thuatbg trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 2
    Bài viết cuối: 06-06-2013, 03:01 PM
  2. Ý nghĩa các câu lệnh trong Objective-C?
    Gửi bởi nobeta911 trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 1
    Bài viết cuối: 26-09-2012, 01:58 PM
  3. Ý nghĩa của protocol trong Objective-C là gì ?
    Gửi bởi learntofly1 trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 2
    Bài viết cuối: 27-08-2012, 03:51 PM
  4. Objective C: alloc và Release ngay khi nó vẫn được sử dụng không bị lỗi, nghĩa là thế nào?
    Gửi bởi haian trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 3
    Bài viết cuối: 17-10-2011, 04:56 PM
  5. Objective-C | Câu hỏi căn bản về Objective-C?
    Gửi bởi nameis trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 27-06-2010, 07:17 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn