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

Đề tài: NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; nghĩa là gì???

  1. #1
    Ngày gia nhập
    02 2010
    Bài viết
    1

    Exclamation NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; nghĩa là gì???

    chào các bác, em mới chập chững học ObjectiveC thắc mắc về dòng lệnh:

    Code:
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    em muốn hỏi ý nghĩa của nó là gì và khi nào thì dùng nó ??? vì thấy trong hàm main có lúc dùng nó, có lúc ko.

    Mong các bác giúp đỡ, em mới tập tọe nên nhờ các bác chỉ bảo

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

    Ủa trong này có hàm main hả cậu.
    Theo mình biết thì cái này dùng để tạo ra thôi giống như new bên C vậy thôi.

  3. #3
    Ngày gia nhập
    08 2010
    Bài viết
    17

    Bạn tìm hiểu thêm về quản lý bộ nhớ trong Objective-C nhé. _http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/MemoryMgmt/Articles/MemoryMgmt.html

    Việc giải phóng bộ nhớ của object, ngoài thủ công thông qua phương thức release, thì còn có thể được tự động hóa bằng phương thức autorelease.

    [object autorelease];

    Khi phương thức này được gọi trên một object, object đó sẽ được thêm vào cái NSAutoreleasePool nói trên, và từ đó trở đi ta không cần bận tâm việc giải phóng object đó nữa. Khi pool được giải phóng, tất cả các object trong nó cũng tự động được giải phóng theo.

    Bạn để ý cuối hàm main có câu lệnh:

    [pool release];

    hoặc

    [pool drain];

    dùng để giải phóng (release, pool sẽ mất) hoặc "đổ" hết object trong pool ra (drain, pool vẫn còn dùng lần sau được)

    Việc dùng autorelease là rất quan trọng khi bạn có phương thức trả về một object, chi tiết ra sao bạn xem ở link trên nhé. Tốt hơn bạn cứ khai báo cái NSAutoreleasePool ở đầu main, và release nó ở cuối main.

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

    [NSAutoreleasePool alloc] là alloc (cấp phát) đối tượng của lớp NSAutoreleasePool. Có thể hiểu đơn giản là khởi tạo đối tượng giống malloc trong C/C++

    Sau khi đã có đối tượng rồi thì gọi method init, init thường là sẽ chỉ làm nhiệm vụ khởi tạo các thành phần cho đối tượng! Kết quả object được trả về cho biến pool là object đã được khởi tạo!

    Với cách viết như của bạn, ref count sẽ là 1, object sẽ tự động được giải phóng. Bạn có thể sử dụng new tuy nhiên trong lập trình Objective C người ta thường tránh dùng new.

    Nó gần như tương đương với dòng lệnh sau trong C++ với điều kiện là C++ có auto release như kiểu Qt C++:
    NSAutoreleasePool *pool = (new NSAutoreleasePool)->init();

    Kevin xin bổ sung một chút ngoài lề: Vấn đề của bạn là vấn đề cơ bản khi bạn tìm hiểu lập trình Objective-C, nếu bạn đã từng học C/C++ thì cũng xin chúc mừng bạn trong việc tiếp cận Objective-C. Hầu hết các cuốn sách dạy Objective-C đều yêu cầu bạn nắm được lập trình C!
    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!

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

    Bạn nên đọc cuốn Programming in ObjectiveC 2.0, nó bao gồm tất cả những vấn đề căn bản nhất. Kể cả cái autoreleasepool.
    Code:
    When the pool is set up, Foundation automatically adds certain arrays, strings, dictionaries, 
    and other objects to this pool.When you’re done using the pool, 
    you can release the memory it uses by sending it a drain message:
    [pool drain];
    The autorelease pool gets its name from the fact that any objects that have been marked for autorelease 
    and, therefore, recorded in the pool are automatically released when the pool itself is released. 
    In fact, you can have more than one autorelease pool in your program, and they can be nested as well.
    Chúc bạn thành công trong việc học objective-c

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

    Mặc định NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; nghĩa là gì???

    Lúc trước thì nên học AutoRelease nhưng nếu học để viết chương trình dành cho IOS thì có thể bỏ qua chức năng này vì Xcode giờ đây đã có ARC để quản lý bộ nhớ.
    Một khi dùng ARC bạn sẽ không cần phải release nữa (Có muốn sử dụng cũng không sử dụng được)

    Hãy sử dụng những chức năng mới của Xcode để chương trình của bạn viết nhanh hơn
    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

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

    ARC đúng là rất tiện, nhưng chỉ khi nào bạn thực sự nắm rõ cơ chế quản lý bộ nhớ đã.
    Mình xài ARC được 1 2 project rồi cũng phải quay lại với non-ARC...

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

    Vậy cho hỏi tại sao bạn phải quay về với non-ARC ?
    Còn về phần cơ chế, thực sự bạn không cần quan tâm thì hiểu rõ để làm gì?

    Đây là bài nghiên cứu của tôi về ARC
    http://diendan.congdongcviet.com/sho...d.php?t=170320

    Nếu bạn vẫn thấy chưa hài lòng thì tôi sẵn sàng tìm thêm những định nghĩa và kiến thức về nó nữa.
    Còn chỉ vì cảm thấy khộng quen hay không thích cái mới thì chịu thua thoai
    Đã được chỉnh sửa lần cuối bởi huygamer : 19-01-2013 lúc 12:07 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

  9. #9
    Ngày gia nhập
    01 2010
    Bài viết
    2

    Tại sao thế bạn, mình thấy ARC rất ổn mà, dĩ nhiên là mình phải nắm rõ cơ chế release của nó, không thì nhiều khi thấy biến nil mà ko hiểu sao bị nil . Nhưng tóm lại mình thấy nó vô cùng hay.

  10. #10
    Ngày gia nhập
    05 2009
    Bài viết
    1

    Trích dẫn Nguyên bản được gửi bởi speedbeeqs Xem bài viết
    Tại sao thế bạn, mình thấy ARC rất ổn mà, dĩ nhiên là mình phải nắm rõ cơ chế release của nó, không thì nhiều khi thấy biến nil mà ko hiểu sao bị nil . Nhưng tóm lại mình thấy nó vô cùng hay.
    Nói chung là nên tự release để kiểm soát tốt chương trình hơn. Bản thân mình ko mấy khi dùng ARC.

    Code:
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
    Chỉ cần hiểu đơn giản thế này. Pool nghĩ là bể chứa. Đối tượng NSAutoreleasePool dùng để khởi tạo 1 biến tham chiếu đến toàn bộ các biến bạn cấp phát vùng nhớ trong chuơng trình của mình. Khi tạo như vậy thì chuơng trình của bạn có thể kiểm soát toàn bộ các vùng nhớ cấp phát. Điều này tạo thuận lợi khi giải phóng bộ nhớ. Khi chuơng trình kết thúc, chỉ cần giải phóng đối tượng NSAutoreleasePool thì tự động toàn bộ các biến và vùng nhớ đã cấp phát sẽ được giải phóng luôn.
    Bạn cứ tưởng tượng là trong 1 cái bể bơi, chính là đối tượng NSAutoreleasePool, nước trong bể chính là biến và vùng nhớ đã cấp phát. Khi cần giải phóng nước trong bể thì người ta chỉ cần giải phóng cái bể thì tự động nước trong bể cũng được giải phóng theo

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

  1. 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
  2. set pool vào connectionString không được
    Gửi bởi toiyeucsharp trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 0
    Bài viết cuối: 03-07-2011, 02:45 AM
  3. Thread pool trong VC++ có tác dụng như thế nào?
    Gửi bởi NOV trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 6
    Bài viết cuối: 07-09-2010, 01:48 PM
  4. Pool connection
    Gửi bởi lampn trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 4
    Bài viết cuối: 21-03-2009, 09:46 AM
  5. Thực thi phương thức với thread-pool trong lập trình C#
    Gửi bởi baokhanhk28 trong diễn đàn Tutorials và Thủ thuật lập trình C#, ASP.NET
    Trả lời: 0
    Bài viết cuối: 07-12-2006, 04:50 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