Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 11
  1. #1
    Ngày tham gia
    Sep 2015
    Đang ở
    Hà Nội
    Bài viết
    0

    Automatic Reference Counting (ARC) trong Xcode 4.2

    I. Thông tin chung:

    Xcode 4.2 ra đời với tính năng mạnh mẽ Automatic Reference Counting (ARC) giúp đỡ lập trình viên tập trung hơn vào việc tạo ra các phần mềm tuyệt vời hơn thay vì cứ phải tập trung vào việc làm sao để bộ nhớ không bị quá tải (Memory leak). Bản thân tôi (huygamer) lúc trước luôn ghét phải release bộ nhớ mỗi khi làm việc với các ngôn ngữ C, C++ (học lại 1 lần cái này >.<). Đây chính là thứ giúp tôi thoát khỏi cơn ác mộng của việc quản lý bộ nhớ.

    II. Nội dung chính:
    1. Định nghĩa chung:
    ARC chính là một phương pháp quản lý bộ nhớ trước lúc thực thi chương trình (compile time). Nó không phải chỉ thêm một lệnh vào trong chương trình đang chạy của bạn mà nó đã đưa lệnh vào từ trước khi bạn build chương trình để chạy. Với ARC, trình biên dịch (LLVM v3.0) tự động thêm vào những lệnh retain và release vào trong đối tượng của bạn và quyết định khi nào đối tượng đó không còn được sử dụng nữa. Chỉ khi nào có con trỏ (point) trỏ đến đối tượng thì đối tượng đó mới tiếp tục tồn tại trong chương trình nếu không nó sẽ bị tự động xóa khỏi bộ nhớ. Sau khi ARC thêm vào các lệnh để quản lý bộ nhớ, chương trình mới được triển khai.

    * Tác dụng:
    Nếu không có ARC, những dòng code sau đây sẽ tạo ra sự rò rỉ bộ nhớ vì những dữ liệu được trả về sẽ không bao giờ được giải phóng và cũng không có con trỏ nào chỉ vào nó:

    Mã:
         - (NSString *) lkPlayerInfo{
         return [[NSString alloc] initWithFormat:@”%@, %@ @%”, self.lkNickName, self.lkTitle, self.LKCapDo];
         }
    Với ARC, nó tự động thêm vào những lệnh giải phóng trong lúc thực thi chương trình để khắc phục sự rò rỉ về bộ nhớ này.

    2. Những điểm cần lưu ý khi dùng ARC:
    - Một khi sử dụng ARC, bạn không thể sử dụng các lệnh retain, release, hay autorelease trong mã nguồn vì những lệnh này được ARC thêm vào tự động trước khi chương trình được chạy. Bạn cũng không thể nào override hay implement những lệnh này.
    - Nhờ vào ARC bạn cũng không cần phải implement hàm dealloc trong các lớp đối tượng (Class) vì với ARC, các đối tượng luôn được giải phóng tự động nên sẽ không bao giờ gặp hiện tượng dealloc.
    - Bạn không thể tạo các struct nữa. Thay vào đò, bạn có thể tùy chỉnh lại các lớp phụ (subclasses) trong Objective C
    - Bạn không thể nào ép kiểu theo cách bình thường được nữa:
    Mã:
    NSString *LKStringX = (NSString *) LKStringY;
    Thay vào đó bạn có thể dụng chỉ thị _bridge:
    Mã:
    NSString *LKStringX = (_bridge NSString *) LKStringY;
    - NSAutoreleasePool không còn nhưng bạn vẫn có thể sử dụng @autoreleasepool
    - Ngoài ra, Xcode cung cấp sẵn công cụ để bạn có thê chuyển các chương trình chưa sử dụng ARC thành những chương trình có ARC.

    III. Kết luận:
    - ARC là một tính năng cực hay của Xcode 4.2 trở lên. Nó không chỉ giúp lập trình viên làm việc dễ dàng hơn (không cần biết đến việc quản lý bộ nhớ) mà nó còn giúp cho bạn tránh được những lỗi không đáng có. ARC giúp bạn tập trung vào những tính năng của chương trình hơn là cứ phải chăm chăm vào những thứ không đáng. Hãy sử dụng những công nghệ mới đừng chăm chăm vào những thứ cũ kĩ mà phung phí thời gian làm những cái mà lẽ ra máy làm rồi

    Product: LapKan Company Product (LK)
    Coder: Huygamer
    Blog: huygamer.wordpress.com

    Bài viết chưa hoàn chỉnh: Vẫn đang bổ sung những code trên Blog. Sẽ cập nhật từ từ

  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Công nhận, dần dần các ngôn ngữ bậc cao hỗ trợ khoản quản lý bộ nhớ này lập trình đỡ hẳn đi. Em làm C/C++ đi dò leak mệt hết cả người. Nhưng cái gì cũng có cái giá của nó cả

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Giá gì?
    ARC hỗ trợ quản lý bộ nhớ tự động như thế này không phải là quá tuyệt à?
    Vậy sao vẫn còn muốn làm bằng tay cho nó tốn thời gian?

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Mình thì không khâm phục những người phải làm những thứ phức tạp để tạo ra một sản phẩm.
    Mình chỉ khâm phục những người tạo ra sản phẩm thành công thôi.

    Chúng ta có thể đi bộ từ đây đến Hà Nội nhưng chúng ta cũng có thể đi máy bay đến Hà Nội.
    Đi bộ chúng ta ngắm được cảnh vật nhưng đi máy bay thì chỉ cần 2 giờ. Chưa kể đi bộ có thể gặp rất nhiều chuyện + chi phí cực cao
    => Hãy xét đến hiệu quả của công việc đừng để ý đến cách thức vì người dùng không quan tâm đến chuyện đó đâu. (Sếp của bạn cũng thế)

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Ý của em không phải ở khía cạnh này bác ạ. Nếu bác làm bằng tay thì bác phải rất am hiểu về bộ nhớ và cách quản lý (lúc nào cấp phát, lúc nào thu hồi), còn nếu các ngôn ngữ đã hỗ trợ rồi thì có khi bác chẳng cần tìm hiểu về quản lý bộ nhớ nhiều làm gì. Chỉ cần nói đến đây chắc bác cũng biết đẳng cấp của các lập trình viên rồi chứ. Em là em rất phục mấy bác làm assem và C, các bác ấy chắc pro lắm đấy

  6. #6
    Hề hề, thế bác chưa nghĩ hết rồi.
    Giờ em đố bác đi từ Khánh Hòa ra Trường Sa bằng ô tô được đấy, hoặc là đi tàu hỏa (or máy bay) từ Đà Nẵng về Thái Bình được đấy. Cái mà em muốn nói ở đây là khi ngôn ngữ càng cao, hỗ trợ càng nhiều thì lập trình viên có thể chỉ biết bề ngoài, mọi thứ đã đượ hỗ trợ sẵn, còn ngôn ngữ thấp hơn thì phải am hiểu về hệ thống nhiều hơn, sâu hơn. Tất nhiên, ở đây em chỉ dám nói đến khía cạnh mình sẽ cần (sau đó sẽ được) bao nhiêu kiến thức khi lập trình với cái đó thôi.

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cơ chế quản lý bộ nhớ tự động này rất hay, thời gian trước em code C embedded, thường xuyên dùng con trỏ và củng thường xuyên mắc lỗi "segment fault" vì không cấp bộ nhớ cho con trỏ trước khi sử dụng, hoặc free nhiều lần. Những lỗi như thế này rất khó tìm trên trình biên dịch chéo

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    ARC tự động thì tự động thiệt nhưng không phải không có chỗ cho bạn áp dụng các kiến thức về quản lý bộ nhớ.
    Apress có sách về vụ quản lý bộ nhớ này nhưng mình chưa nghiên cứu vì muốn ra chương trình trước sau đó mới tối ưu hóa sau.

    Mà tui thì cực kì ghét cái vụ phải quản lý bộ nhớ của thằng C/C++ may mà có cái ARC này [IMG]images/smilies/smile.png[/IMG]

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trừ phi bạn muốn Hack vào hệ thống và tự hả hê với chính bản thân thì các đó đáng khâm phục chứ về việc tạo ra ứng dụng với game thì việc am hiểu về hệ thống chả giúp được cái gì cả. Vì một ứng dụng và game thực sự cần quá nhiều thứ (Tối thiểu thì cũng đồ họa, thuật toán, xử lý giao diện,... và các tính năng như thành tích, điểm số cao nhất,...), hiểu về hệ thống và viết từ đầu thì chứng 10 năm nữa bạn mới ra được cái game đầu tiên.
    Bây giờ thì mình để ý đến khía cạnh thương mại hóa và thực tiễn của trò chơi hơn là việc bảo mật hay tối ưu hóa được thêm một tí.
    Thậm chí nói về hỗ trợ sẵn thì bạn nên kiếm quách 1 game giống giống như game bạn cần làm về sửa lại cho nó theo tất cả những yêu cầu bạn muốn thì nhanh hơn và kinh tế hơn nữa. Đừng theo cái lối mòn, phải xây dựng lại từ đầu hay từ nên tảng lên nữa.

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    hi, a huygamer.
    Theo anh thì ARC làm thế nào để quản lý bộ nhớ? Em thì nghĩ rằng ARC được viết bằng các ngôn ngữ "phức tạp" để "đơn giản" việc sử dụng ARC để anh viết các phần mềm "thương mại" đấy ạ
    @em nghĩ gabk nói cái giá của việc phải tự quản lý bộ nhớ là giúp bạn ấy hiểu thêm về nền tảng của cái chương trình chứ k có ý gì khác đâu

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •