Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 11 kết quả

Đề tài: Automatic Reference Counting (ARC) trong Xcode 4.2

  1. #1
    Ngày gia nhập
    04 2011
    Bài viết
    127

    Cool 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ó:

    Code:
         - (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:
    Code:
    NSString *LKStringX = (NSString *) LKStringY;
    Thay vào đó bạn có thể dụng chỉ thị _bridge:
    Code:
    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ừ
    Đã được chỉnh sửa lần cuối bởi huygamer : 11-01-2013 lúc 10:09 AM.
    http://huygamer.wordpress.com/
    => Kinh nghiệm lập trình của huygamer
    https://itunes.apple.com/us/app/card...1239?ls=1&mt=8
    => Game Card Rush Halloween mới viết xong

  2. #2
    Ngày gia nhập
    07 2009
    Bài viết
    48

    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 gia nhập
    04 2011
    Bài viết
    127

    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?
    http://huygamer.wordpress.com/
    => Kinh nghiệm lập trình của huygamer
    https://itunes.apple.com/us/app/card...1239?ls=1&mt=8
    => Game Card Rush Halloween mới viết xong

  4. #4
    Ngày gia nhập
    07 2009
    Bài viết
    48

    Ý 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

  5. #5
    Ngày gia nhập
    04 2011
    Bài viết
    127

    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ế)
    http://huygamer.wordpress.com/
    => Kinh nghiệm lập trình của huygamer
    https://itunes.apple.com/us/app/card...1239?ls=1&mt=8
    => Game Card Rush Halloween mới viết xong

  6. #6
    Ngày gia nhập
    07 2009
    Bài viết
    48

    Mặc định Automatic Reference Counting (ARC) trong Xcode 4.2

    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 gia nhập
    04 2011
    Bài viết
    127

    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.
    http://huygamer.wordpress.com/
    => Kinh nghiệm lập trình của huygamer
    https://itunes.apple.com/us/app/card...1239?ls=1&mt=8
    => Game Card Rush Halloween mới viết xong

  8. #8
    Ngày gia nhập
    12 2009
    Nơi ở
    bế quan tu lại
    Bài viết
    846

    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

  9. #9
    Ngày gia nhập
    04 2011
    Bài viết
    127

    Dùng ARC không có nghĩa là em không cần quan tấm đến việc quản lý bộ nhớ ?
    Công nghệ mới thường sẽ bao gồm luôn cả công nghệ cũ và thêm những tính năng mới mạnh mẽ hơn.

    Nếu em có cảm giác ARC làm thu chột khả năng quản lý bộ nhớ của em thì anh có 1 cuốn sách của Apress chuyên về phần quản lý bộ nhớ đây:

    Pro Multithreading and Memory Management for iOS and OS X
    with ARC, Grand Central Dispatch, and Blocks

    Đọc xong em sẽ thấy ARC không phải chỉ giúp cho lập trình viên lười biếng hơn mà giúp cho chúng ta có thêm công cụ mạnh mẽ hơn để có thể làm chương trình tốt hơn.
    Cuốn này anh đã có nhưng thực sự nó dành cho những chương trình đã hoàn chỉnh và dành cho những người muốn chuyên sâu về lĩnh vực quản lý bộ nhớ nên anh chỉ đọc sơ qua thôi.
    Cái anh cần bây giờ là những chương trình thành phẩm còn chất lượng ngày càng tốt hơn thì có lẽ dành cho tương lai . Nếu em cần thì anh có thể post cho em nghiên cứu
    Đã được chỉnh sửa lần cuối bởi huygamer : 18-01-2013 lúc 02:48 PM.
    http://huygamer.wordpress.com/
    => Kinh nghiệm lập trình của huygamer
    https://itunes.apple.com/us/app/card...1239?ls=1&mt=8
    => Game Card Rush Halloween mới viết xong

  10. #10
    Ngày gia nhập
    06 2012
    Bài viết
    2

    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

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

  1. Sự kiện gì sảy ra trong xcode khi kéo các UIButton, UIlabel......
    Gửi bởi hoathuongphuoc trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 3
    Bài viết cuối: 21-03-2014, 04:50 PM
  2. Các loại reference trong Java: strong reference, soft reference, weak reference, phantom reference và ứng dụng
    Gửi bởi SuperUser trong diễn đàn Tutorials và Thủ thuật lập trình Java
    Trả lời: 2
    Bài viết cuối: 02-10-2013, 04:41 PM
  3. Cách add appropriate class Trong Xcode?
    Gửi bởi honey trong diễn đàn Thắc mắc lập trình Objective-C
    Trả lời: 1
    Bài viết cuối: 11-09-2011, 12:58 AM
  4. Lệnh #pragma mark - View lifecycle trong Xcode Iphone có tác dụng gì?
    Gửi bởi Iphone4 trong diễn đàn Thắc mắc lập trình C/C++ trên Linux
    Trả lời: 2
    Bài viết cuối: 08-08-2011, 11:55 AM

Tags của đề tài này

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