<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6343902192363257878</id><updated>2015-09-17T06:59:30.680+07:00</updated><category term="Hackintosh"/><category term="MS SQL Server"/><category term="SQL Server 2008"/><category term="Featured"/><category term="Objective-C"/><category term="Khóa offline"/><category term="C-Sharp"/><category term="Học Offline"/><category term="Chia sẻ Sourcecode"/><category term="Giới thiệu"/><category term="iOS"/><category term="Chia sẻ Coupon"/><category term="Chương trình ưu đãi"/><category term="Hoạt động offline"/><category term="Học online"/><category term="Sử dụng máy tính"/><category term="Visual studio"/><category term="java"/><title type='text'>ICTSharing Education</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default?max-results=10&amp;redirect=false'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default?start-index=11&amp;max-results=10&amp;redirect=false'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>53</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>10</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-3494714270859256256</id><published>2014-03-25T01:56:00.002+07:00</published><updated>2014-03-25T01:57:59.707+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="Hackintosh"/><title type='text'>Tạo USB cài đặt MAC OSX 10.9 Mavericks bằng video</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-LgzvKcsIwOA/UzCACfa_VyI/AAAAAAAABbA/61hT5DTa--c/s1600/3-25-2014+1-30-46+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-LgzvKcsIwOA/UzCACfa_VyI/AAAAAAAABbA/61hT5DTa--c/s1600/3-25-2014+1-30-46+AM.png&quot; height=&quot;180&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Nếu các bạn đã từng tạo USB cài đặt MAC OSX cho bản 10.8.4 hoặc các bản trước đó sẽ thấy khi tạo USB cài đặt cho bản 10.9 sẽ có một số khác biệt nhỏ. Tuy nhiên, nhiều bạn sẽ gặp khó khăn vì không hiểu sẽ làm thế nào với bộ cài đặt mới này. Video sau đây sẽ hướng dẫn bạn cách tạo một USB cài đặt MAC OSX 10.9 Mavericks thật đơn giản.&lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Bạn có thể tải về bộ cài và các công cụ được sử dụng trong video, bao gồm:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;Bộ cài MAC OSX 10.9 Mavericks:&amp;nbsp;&lt;a href=&quot;http://www.fshare.vn/file/T4K24425NT/&quot;&gt;http://www.fshare.vn/file/T4K24425NT/&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Bộ công cụ hỗ trợ tạo USB cài đặt:&amp;nbsp;&lt;a href=&quot;http://www.fshare.vn/file/T6VV8W4MJT/&quot;&gt;http://www.fshare.vn/file/T6VV8W4MJT/&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;//www.youtube.com/embed/4ZEELQ7Y_0U&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt; &lt;br /&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Đây là kết quả sau khi cài đặt MAC OSX 10.9 từ USB được tạo trong video nhé:&lt;/div&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-8aNR_v6HOM8/UzBkfvHJ-lI/AAAAAAAABaY/mjMns45pfks/s1600/Screen+Shot+2014-03-24+at+11.54.36+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-8aNR_v6HOM8/UzBkfvHJ-lI/AAAAAAAABaY/mjMns45pfks/s1600/Screen+Shot+2014-03-24+at+11.54.36+PM.png&quot; height=&quot;358&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-vUcxjAEhc6g/UzBklD7SA6I/AAAAAAAABag/10EpazjPXEk/s1600/Screen+Shot+2014-03-24+at+11.54.51+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-vUcxjAEhc6g/UzBklD7SA6I/AAAAAAAABag/10EpazjPXEk/s1600/Screen+Shot+2014-03-24+at+11.54.51+PM.png&quot; height=&quot;358&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-A7025E7g0jo/UzBknVSOtwI/AAAAAAAABao/2rrgywVuMAk/s1600/Screen+Shot+2014-03-24+at+11.55.27+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-A7025E7g0jo/UzBknVSOtwI/AAAAAAAABao/2rrgywVuMAk/s1600/Screen+Shot+2014-03-24+at+11.55.27+PM.png&quot; height=&quot;358&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-mBgT-aWWgPs/UzBkuo7H7zI/AAAAAAAABaw/RSxREPEo6HQ/s1600/Screen+Shot+2014-03-25+at+12.00.01+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-mBgT-aWWgPs/UzBkuo7H7zI/AAAAAAAABaw/RSxREPEo6HQ/s1600/Screen+Shot+2014-03-25+at+12.00.01+AM.png&quot; height=&quot;358&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;div&gt;Chúc các bạn thành công!&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/3494714270859256256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/tao-usb-cai-at-mac-osx-109-mavericks.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/3494714270859256256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/3494714270859256256'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/tao-usb-cai-at-mac-osx-109-mavericks.html' title='Tạo USB cài đặt MAC OSX 10.9 Mavericks bằng video'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-LgzvKcsIwOA/UzCACfa_VyI/AAAAAAAABbA/61hT5DTa--c/s72-c/3-25-2014+1-30-46+AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-5963530421517238564</id><published>2014-03-23T14:36:00.000+07:00</published><updated>2014-03-23T23:26:39.363+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="MS SQL Server"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008"/><title type='text'>[Tự học SQL Server 2008] - Gửi Email từ SQL Server</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-fWgHN7Rjy8o/Uy6V8NF00pI/AAAAAAAABZg/xig_PvNWkIs/s1600/gui+mail+trong+sql+server.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-fWgHN7Rjy8o/Uy6V8NF00pI/AAAAAAAABZg/xig_PvNWkIs/s1600/gui+mail+trong+sql+server.png&quot; height=&quot;181&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Một tính năng khá thú vị là bạn có thể gửi email ngay từ trong SQL Server. Tính năng hỗ trợ bạn tạo và quản lý một mail database thực hiện gửi email bằng T-SQL rất thuận tiện. Bạn cũng có thể sử dụng chức năng này trong các hệ thống để liên lạc/gửi thông báo tới người dùng. Cùng theo dõi video để tìm hiểu về tính năng nhé!&lt;br /&gt;&lt;br /&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;//www.youtube.com/embed/zUdpLcmRF0w&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/5963530421517238564/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/tu-hoc-sql-server-2008-gui-email-tu-sql.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/5963530421517238564'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/5963530421517238564'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/tu-hoc-sql-server-2008-gui-email-tu-sql.html' title='[Tự học SQL Server 2008] - Gửi Email từ SQL Server'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/-fWgHN7Rjy8o/Uy6V8NF00pI/AAAAAAAABZg/xig_PvNWkIs/s72-c/gui+mail+trong+sql+server.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-2353174204932319435</id><published>2014-03-23T04:50:00.001+07:00</published><updated>2014-03-23T23:26:48.217+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="MS SQL Server"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Server 2008"/><title type='text'>Tự học SQL Server 2008 – Phương pháp xử lý dữ liệu trung gian (Phần 3)</title><content type='html'>&lt;div style=&quot;background-color: white; margin: 0px; padding: 0px; text-align: right;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-6aeQIF56G7E/Uy4FctbV8DI/AAAAAAAABZM/7suBKTOsXwM/s1600/Screen+Shot+2014-03-23+at+4.49.17+AM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-6aeQIF56G7E/Uy4FctbV8DI/AAAAAAAABZM/7suBKTOsXwM/s1600/Screen+Shot+2014-03-23+at+4.49.17+AM.png&quot; height=&quot;179&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;span style=&quot;color: #141414; line-height: 20.533334732055664px;&quot;&gt;Trong phần này, chúng ta sẽ tiếp tục tìm hiểu một đối tượng khác khi cần làm việc với các bộ dữ liệu trung gian đó là Biểu thức bảng (Common Table Expressions). Đây cũng là một phần rất quan trọng khi các bạn làm việc với SQL Server, với các đặc tính đặc biệt của mình, CTE sẽ giúp bạn dễ dàng hơn khi làm thao tác dữ liệu trong SQL Server.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;div&gt;&lt;span style=&quot;color: #141414;&quot;&gt;&lt;span style=&quot;line-height: 20.533334732055664px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #141414;&quot;&gt;&lt;span style=&quot;line-height: 20.533334732055664px;&quot;&gt;Hãy xem và chia sẻ video đến mọi người nhé, hãy cùng mở rộng cộng đồng ICTSharing ngày càng lớn hơn nữa, giúp được nhiều bạn hơn nữa nhé!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #141414;&quot;&gt;&lt;span style=&quot;line-height: 20.533334732055664px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #141414;&quot;&gt;&lt;span style=&quot;line-height: 20.533334732055664px;&quot;&gt;Like và Subscribe nếu bạn thấy video hữu ích!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #141414;&quot;&gt;&lt;span style=&quot;line-height: 20.533334732055664px;&quot;&gt;Enjoy!&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;color: #141414;&quot;&gt;&lt;span style=&quot;line-height: 20.533334732055664px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;//www.youtube.com/embed/cNbDt7H_abY&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/2353174204932319435/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/tu-hoc-sql-server-2008-phuong-phap-xu.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/2353174204932319435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/2353174204932319435'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/tu-hoc-sql-server-2008-phuong-phap-xu.html' title='Tự học SQL Server 2008 – Phương pháp xử lý dữ liệu trung gian (Phần 3)'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/-6aeQIF56G7E/Uy4FctbV8DI/AAAAAAAABZM/7suBKTOsXwM/s72-c/Screen+Shot+2014-03-23+at+4.49.17+AM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-6045681481653621842</id><published>2014-03-22T23:31:00.001+07:00</published><updated>2014-03-23T23:26:54.833+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Featured"/><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><title type='text'>[Tự học lập trình iOS] - Bài 1: Ứng dụng đầu tiên cho iPhone &amp; iPad</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/--0VpLOB3QHg/Uy28fOM4vfI/AAAAAAAABY8/TZ03LOeZVbI/s1600/Screen+Shot+2014-03-22+at+10.49.47+PM.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/--0VpLOB3QHg/Uy28fOM4vfI/AAAAAAAABY8/TZ03LOeZVbI/s1600/Screen+Shot+2014-03-22+at+10.49.47+PM.png&quot; height=&quot;179&quot; width=&quot;320&quot; /&gt;&lt;/a&gt;&lt;/div&gt;Welcome back,&lt;br /&gt;Đây là video đầu tiên trong series video về lập trình cơ bản với iOS. Trong video này, bạn sẽ học các làm quen với môi trường phát triển ứng dụng cho iOS đó là bộ công cụ IDE Xcode của apple. Cùng học các tạo UI đơn giản cho thiết bị iPhone và iPad và các kết nối giữa tầng UI và tầng code logic. Đây là một ví dụ cơ bản xong sẽ gúp bạn có một cái nhìn tổng quan nhất để lam quen với việc phát triển ứng dụng cho iOS. Để bắt đầu lập trình cho iOS các bạn cần:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Luôn luôn cần có sự đam mê với lập trình :)) ... lalala&lt;/li&gt;&lt;li&gt;Máy tính cài MAC OS (10.8.4 Mountain Lion trở nên - Bạn nên cài bản mới nhất 10.9 Mavericks để cập nhật những tính năng mới nhất).&lt;/li&gt;&lt;li&gt;Bộ công cụ phát triển Xcode IDE 5 (Tải về từ Appstore).&lt;/li&gt;&lt;li&gt;Kiến thức về Objective-C (Các bạn có thể tham khảo theo loạt bài cơ bản về Objective-C trên blog này).&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Nào bây giờ cùng theo dõi video.. Nếu bạn thấy hay hãy share/like/subsribe để ủng hộ nhé!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;iframe allowfullscreen=&quot;&quot; frameborder=&quot;0&quot; height=&quot;360&quot; src=&quot;//www.youtube.com/embed/iNnuHq9o4Q0&quot; width=&quot;640&quot;&gt;&lt;/iframe&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/6045681481653621842/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/tu-hoc-lap-trinh-ios-bai-1-ung-dung-au.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/6045681481653621842'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/6045681481653621842'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/tu-hoc-lap-trinh-ios-bai-1-ung-dung-au.html' title='[Tự học lập trình iOS] - Bài 1: Ứng dụng đầu tiên cho iPhone &amp; iPad'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/--0VpLOB3QHg/Uy28fOM4vfI/AAAAAAAABY8/TZ03LOeZVbI/s72-c/Screen+Shot+2014-03-22+at+10.49.47+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-1707406849838683490</id><published>2014-03-18T01:19:00.002+07:00</published><updated>2014-03-18T01:19:55.286+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="iOS"/><title type='text'>Hệ điều hành iOS là gì?</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/--1rpcvJuWjM/Uyc61ty_6PI/AAAAAAAABT4/6gWkZUkCp7M/s1600/iOS-7-concept-Simply-Zesty.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/--1rpcvJuWjM/Uyc61ty_6PI/AAAAAAAABT4/6gWkZUkCp7M/s1600/iOS-7-concept-Simply-Zesty.jpg&quot; height=&quot;225&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Hệ điều hành iOS là gì? &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;iOS là hệ điều hành trên các thiết bị di động của Apple. Ban đầu hệ điều hành này chỉ được phát triển để chạy trên iPhone, nhưng sau đó nó đã được mở rộng để chạy trên các thiết bị của Apple như iPod touch, iPad và Apple TV. Ngày 31 tháng 5, 2011, App Store của Apple chứa khoảng 500 000 ứng dụng iOS, và được tải về tổng cộng khoảng 15 tỷ lần. Trong quý 4 năm 2010, có khoảng 26% điện thoại thông minh chạy hệ điều hành iOS, sau hệ điều hành Android của Google và Symbian của Nokia. &lt;br /&gt;&lt;br /&gt;Giao diện người dùng của iOS dựa trên cơ sở thao tác bằng tay. Người dùng có thể tương tác với hệ điều hành này thông qua rất nhiều động tác bằng tay trên màn hình cảm ứng của các thiết bị của Apple. &lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-cEzcyFM83UU/Uyc8ee_sd2I/AAAAAAAABUE/o1YD2fsAns8/s1600/iOS-Devices.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-cEzcyFM83UU/Uyc8ee_sd2I/AAAAAAAABUE/o1YD2fsAns8/s1600/iOS-Devices.jpg&quot; height=&quot;248&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;b&gt;Lịch sử hệ điều hành iOS &lt;/b&gt;&lt;br /&gt;&lt;br /&gt;Hệ điều hành này được tiết lộ tại Hội nghị và Triển lãm Macworld diễn ra vào tháng 1 năm 2007 và được phát hành vào tháng 9 năm đó. Khi đó, hệ điều hành này chưa có một cái tên riêng nên chỉ đơn giản là &quot;iPhone chạy OS X&quot;. Ban đầu, ứng dụng bên thứ ba không được hỗ trợ. Steve Jobs đã chỉ ra rằng những nhà phát triển có thể xây dựng các ứng dụng web mà &quot;sẽ cư xử như những ứng dụng ban đầu trên iPhone&quot;. Vào ngày 17 tháng 10 năm 2007, Apple thông báo một bộ phát triển phần mềm đang được xây dựng và họ dự định sẽ đưa nó đến &quot;tay của các nhà phát triển vào tháng 2&quot;. Ngày 6 tháng 3 năm 2008, Apple đã phát hành bản dùng thử đầu tiên, cùng với một cái tên mới cho hệ điều hành, đó là &quot;iPhone OS&quot;. &lt;br /&gt;&lt;br /&gt;Tháng 6 năm 2010, Apple đổi cái tên &lt;b&gt;iPhone OS&lt;/b&gt; thành &lt;b&gt;iOS&lt;/b&gt;. Nhãn hiệu &quot;IOS&quot; đã được Cisco dùng để đặt tên cho hệ điều hành của mình. Để tránh các vụ kiện cáo, Apple đã xin giấy phép sử dụng nhãn hiệu iOS từ Cisco.</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/1707406849838683490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/he-ieu-hanh-ios-la-gi.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/1707406849838683490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/1707406849838683490'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/he-ieu-hanh-ios-la-gi.html' title='Hệ điều hành iOS là gì?'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/--1rpcvJuWjM/Uyc61ty_6PI/AAAAAAAABT4/6gWkZUkCp7M/s72-c/iOS-7-concept-Simply-Zesty.jpg" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-6287491316081611784</id><published>2014-03-18T00:45:00.003+07:00</published><updated>2014-03-21T12:15:10.387+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><title type='text'>Phần 6: Chuẩn bị “lên đỉnh” với iPhone application</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;strong&gt;Sau 5 bài học từ những cảm nhận “lần đầu” đến sự “vật lộn” với Objective-C, có lẽ các bạn cũng đã có trong tay một gia tài kha khá về lập trình Objective-C. Vậy đây có phải là mục tiêu cuối cùng của bạn chưa? Chúng tôi tin chắc rằng hầu hết các Apple developer đều mong muốn là có thể “lên đỉnh” với những ứng dụng cho iPhone, iPad do chính mình viết. Nếu quả thật như vậy thì các bạn sẽ còn cả một chặng đường dài phía trước. Tuy nhiên, để giúp các bạn có thể hoàn thiện về Objective-C cũng như có thêm những khái niêm liên quan đến iPhone development, chúng tôi xin giới thiệu thêm về Categories và Cocoa Touch (framework dùng để phát triển ứng dụng trên iOS).&lt;/strong&gt;&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Categories&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Vì vậy,&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;là gì? Rất nhiều các hướng dẫn hay bài học về&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;thường không nhắc tới nó. Theo quan điểm của chúng tôi đó là một điều rất đáng tiếc bởi vì thực sự đó là một tính năng khá hữu ích.&amp;nbsp;&lt;strong&gt;Category&lt;/strong&gt;&amp;nbsp;giúp giữ mã lệnh sáng sủa và ít lộn xộn bằng cách loại bỏ sự cần thiết cho việc khai báo các lớp con không cần thiết. Từ những gì chúng ta đã học được cho đến nay, nếu chúng ta có một đối tượng&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;và chúng ta muốn thêm một phương thức, ví dụ như để thay thế tất cả các ký tự ‘a’ với một ’4 ‘ thì chúng ta có thể tạo một lớp con của lớp&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;và thêm phương thức đó vào. Chúng tôi cũng đã chỉ các cách để tạo lớp con và thêm các phương thức trong ví dụ làm việc với lớp Car. Tạo lớp con là một cách tiếp cận tốt và chúng tôi không nói là các bạn không nên dùng lớp con. Tuy nhiên, trong một số tình huống nhất định,&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;cung cấp một cách tiếp cận tốt hơn để thêm một số chức năng bổ sung cho một lớp.&lt;br /&gt;&lt;strong&gt;&lt;span id=&quot;more-416&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;strong&gt;Category&lt;/strong&gt;&amp;nbsp;cho phép chúng ta có thể thêm các phương thức vào một lớp đã tồn tại, do đó tất cả các đối tượng thể hiện của lớp đó trong chương trình sẽ có thêm các phương thức mới. Ví dụ, chúng ta có 100 đối tượng&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;trong chương trình, nhưng bạn muốn tạo một lớp con tùy chỉnh để từng&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;có thêm một phương thức mới (giả sử là&amp;nbsp;&lt;code&gt;reverseString&lt;/code&gt;). Với các&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;, chúng tôi chỉ đơn giản là có thể thêm các phương thức vào một lớp thuộc&amp;nbsp;&lt;strong&gt;category&amp;nbsp;&lt;/strong&gt;cụ thể (do chúng ta tạo nên) và tất cả các thể hiện trên&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;đó sẽ được phép sử dụng phương thức mới đó. Cú pháp rõ ràng là hơi khác so với việc sử dụng lớp con và&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;không cho phép bạn sử dụng instance variables. Tuy nhiên, nó có thể overriding các method đã được đặt ra, nhưng điều này nên được thực hiện một cách thận trọng và chỉ làm khi thực sự cần thiết.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Syntax&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;strong&gt;Category&lt;/strong&gt;&amp;nbsp;khai báo giống như bình thường chỉ khác ở chỗ sau tên lớp ta sẽ cho thêm tên của&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;. Cụ thể ta sẽ tìm hiểu cú pháp tạo&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;trong interface và lớp thực thi. Khai báo trong interface sẽ như sau:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;@interface ClassName(category)&lt;br /&gt;// method declarations go here...&lt;br /&gt;@end&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Còn trong lớp thực thi sẽ là:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;@implementation ClassName(category)&lt;br /&gt;// method implementations go here...&lt;br /&gt;@end&lt;/pre&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Triển khai ví dụ&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Thực sự là dễ dàng và dễ hiểu có phải không? Vì vậy, chúng ta hãy xem ví dụ: thực hiện một phương thức đơn giản mà sẽ đảo ngược một chuỗi. Các bạn đừng quan tâm đến ý nghĩa của phương thức mà hãy quan tâm đến cách thức ta sử dụng category để sau này có thể áp dụng vào bài toán của chính mình. Cụ thể ở interface sẽ như sau:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;@interface NSString(reverse)&lt;br /&gt;-(NSString *)reverseString;&lt;br /&gt;@end&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Bây giờ chúng ta sẽ xây dựng lớp thực thi như sau:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;@implementation NSString(reverse)&lt;br /&gt;-(NSString *)reverseString{}&lt;br /&gt;@end&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Tiếp theo, chúng ta sẽ thêm một số mã lệnh đơn giản để đảo ngược chuỗi. Để đảo ngược chuỗi chúng ta cần một đối tượng chuỗi trung gian chứa chuỗi đảo ngược. Cách chúng tôi sẽ đảo ngược chuỗi là chỉ đơn giản lặp các ký tự trong chuỗi hiện có theo thứ tự đảo ngược và lưu các ký tự đó vào chuỗi tạm thời. Mã lệnh cho cách thức trên sẽ như sau:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-E3SuXJ3wk1w/UymQOpBoPoI/AAAAAAAABYM/F9ONFRgkaOY/s1600/nsstringreverse_interface.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-E3SuXJ3wk1w/UymQOpBoPoI/AAAAAAAABYM/F9ONFRgkaOY/s1600/nsstringreverse_interface.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Phương pháp này khá đơn giản, chúng ta sẽ dùng vòng lặp duyệt các ký tự trong chuỗi. Chúng ta nối thêm các ký tự hiện tại bằng cách sử dụng&amp;nbsp;&lt;code&gt;stringWithFormat&lt;/code&gt;&amp;nbsp;và ký tự nhận dạng (&lt;code&gt;%c&lt;/code&gt;). Nếu tất cả diễn ra tốt đẹp thì sau đó tất cả các đối tượng&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;trong chương trình của chúng ta phải tuân theo&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;mới. Cụ thể, bây giờ tất cả các đối tượng của&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;của chúng ta sẽ có phương thức&amp;nbsp;&lt;code&gt;reverseString&lt;/code&gt;&amp;nbsp;để đảo ngược chuỗi mà nó đang chứa.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Ta sẽ lưu mã lệnh trong các file interface và lớp thực thi vào các file với tên theo theo quy ước riêng. Cụ thể, hai file mà chúng tôi đã tạo ra được đặt tên:&amp;nbsp;&lt;code&gt;NSString+reverse.h&lt;/code&gt;&amp;nbsp;(interface) và&amp;nbsp;&lt;code&gt;NSString+reverse.m&lt;/code&gt;&amp;nbsp;(lớp thực thi). Đây là một quy ước đặt tên biến điển hình của kiểu lớp mà có thêm một&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;(‘+’, và tên của&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;). Tiếp tục chúng ta sẽ vào lớp&amp;nbsp;&lt;code&gt;main. m&lt;/code&gt;&amp;nbsp;để xây dựng đoạn mã để kiểm tra xem quá trình tạo&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;vừa rồi cho ta kết qủa như thế nào. Các bạn chú ý phải import &amp;nbsp;file header vừa tạo vào đầu file main.m. Trong đoạn mã lệnh bên dưới, chúng ta có khởi tạo đối tượng&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;nhưng các bạn đừng nhầm là đó là đối tượng nguyên bản trong&lt;strong&gt;foundation framework&lt;/strong&gt;&amp;nbsp;mà đó là đối tượng&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;thuộc&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;“&lt;strong&gt;reverse&lt;/strong&gt;” mà chúng ta đã tạo ra và như vậy ta có thể kiểm tra phương thức&amp;nbsp;&lt;code&gt;reverseString&lt;/code&gt;. Cụ thể, nội dung sẽ như thế này:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-TA5BtKFWL-c/UymQYcu9MwI/AAAAAAAABYU/nP64fOT9Cac/s1600/reversedstring_main.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-TA5BtKFWL-c/UymQYcu9MwI/AAAAAAAABYU/nP64fOT9Cac/s1600/reversedstring_main.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Nếu tất cả các bước trên bạn đã thực hiện đúng thì còn chần chừ gì nữa. Hãy ấn ngày button “Run” và tận hưởng kết quả là một chuỗi đã được đảo ngược “&lt;strong&gt;txeT elpmaS&lt;/strong&gt;” trên màn hình output.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Như bạn có thể thấy,&amp;nbsp;&lt;strong&gt;category&lt;/strong&gt;&amp;nbsp;thực sự là khá hữu ích (đặc biệt là với chuỗi). Chúng có thể sử dụng trong bất kỳ chương trình nào, một trong những trường hợp phổ biến chúng tôi hay sử dụng là phương thức kiểm tra tính hợp lệ đối với dữ liệu. Bằng cách này, chúng ta có thể giữ tất cả phương thức kiểm tra tính hợp lệ của dữ liệu ở một chỗ và không phải sử dụng bất kỳ subclass phức tạp nào cả.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Chuẩn bị “lên đỉnh” với iPhone application&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Có lẽ nhiều bạn đọc đến đây sẽ rất “máu” và mong muốn “vọc” vào viết&amp;nbsp;&lt;strong&gt;iPhone&lt;/strong&gt;&amp;nbsp;application ngay. Tuy nhiên đừng vội, hãy chuẩn bị thật kỹ vì chúng ta còn có nhiều thời gian. Phần tiếp theo chúng tôi xin giới thiệu một số khái niệm về&lt;strong&gt;Cocoa framework&lt;/strong&gt;, một thành phần rất quan trọng đối với các&amp;nbsp;&lt;strong&gt;Apple&lt;/strong&gt;&amp;nbsp;developer. Phần này chúng tôi sẽ không đi sâu nói về&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;nữa mà tôi muốn giới thiệu qua cho các bạn những công cụ, hướng dẫn hay cụ thể là những API mà các bạn cần dùng trong quá trình phát triển các&amp;nbsp;&lt;strong&gt;iPhone&lt;/strong&gt;&amp;nbsp;application sau này.&lt;/div&gt;&lt;h4 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 16px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Xcode và iOS SDK&lt;/h4&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Để phát triển các ứng dụng trên&amp;nbsp;&lt;strong&gt;iPhone&lt;/strong&gt;&amp;nbsp;hay&amp;nbsp;&lt;strong&gt;iPad&lt;/strong&gt;&amp;nbsp;các bạn cần phải hiểu kỹ về hệ điều hành mà các thiết bị này đang sử dụng bạn. Đó chính là hệ điều hành&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;. Đối với “người mới”, chắc hẳn các bạn sẽ lo lắng làm thể nào có thể trải nghiệm&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;&amp;nbsp;hay dùng công cụ gì để phát triển các ứng dụng trên&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;. Không phải lo lắng,&amp;nbsp;&lt;strong&gt;Apple&lt;/strong&gt;&amp;nbsp;đã làm hết cho bạn rồi. Nếu bạn đã cài hệ điều hành&amp;nbsp;&lt;strong&gt;MacOS&lt;/strong&gt;&amp;nbsp;X thì bạn có thể cài thêm các option về&amp;nbsp;&lt;strong&gt;Xcode&lt;/strong&gt;&amp;nbsp;và&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;&amp;nbsp;SDK.&amp;nbsp;&lt;strong&gt;Xcode&lt;/strong&gt;&amp;nbsp;là một bộ công cụ cực kỳ tuyệt vời giúp bạn có thể dễ dàng tạo, xây dựng, kiểm tra và chạy thử các ứng dụng cho&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;. Tuy nhiên bạn đừng quên bạn sẽ không thể giả lập hay sử dụng tất cả các tính năng như trên các thiết bị thật nếu thiếu&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;&amp;nbsp;SDK. Bộ SDK này chứa đầy đủ các thư viện để phát triển ứng dụng cũng như công cụ giả lập thiết bị giúp bạn có &amp;nbsp;cái nhìn trực quan các ứng dụng chạy trên&amp;nbsp;&lt;strong&gt;iPhone&lt;/strong&gt;&amp;nbsp;hay&amp;nbsp;&lt;strong&gt;iPad&lt;/strong&gt;. Một lời khuyên chân thành là “hãy đầu tư một máy tính của&amp;nbsp;&lt;strong&gt;Apple&lt;/strong&gt;&amp;nbsp;để phát triển các ứng dụng cho&amp;nbsp;&lt;strong&gt;Apple&lt;/strong&gt;“.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-DCnrroRZEh0/UymQgtA_J9I/AAAAAAAABYc/m2MXceyLAH4/s1600/ios_sdk.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-DCnrroRZEh0/UymQgtA_J9I/AAAAAAAABYc/m2MXceyLAH4/s1600/ios_sdk.jpg&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h4 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 16px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Cocoa Touch framework&lt;/h4&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;strong&gt;Cocoa Touch framework&lt;/strong&gt;&amp;nbsp;chứa các thư viện, API và runtime giúp cho&amp;nbsp;&lt;strong&gt;Apple&lt;/strong&gt;&amp;nbsp;developer có thể nhanh chóng xây dựng các ứng dụng trên&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;. &amp;nbsp;&lt;strong&gt;Cocoa Touch framework&lt;/strong&gt;&amp;nbsp;được xây dựng tập trung&amp;nbsp;vào giao diện cảm ứng và tối ưu hóa các ứng dụng trên&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;. Trong&amp;nbsp;&lt;strong&gt;Cocoa Touch framework&lt;/strong&gt;, thành phần&amp;nbsp;&lt;strong&gt;UIKit&lt;/strong&gt;&amp;nbsp;cung cấp các công cụ cơ bản mà bạn cần để xây dựng các ứng dụng GUI và hướng sự kiện trong&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;.&amp;nbsp;&lt;strong&gt;UIKit&lt;/strong&gt;&amp;nbsp;được xây dựng dựa trên cơ sở của&amp;nbsp;&lt;strong&gt;Foundation framework -&amp;nbsp;&lt;/strong&gt;thành phần rất quan trọng cho phát triển ứng dụng trên hệ điều hành&amp;nbsp;&lt;strong&gt;MacOS&lt;/strong&gt;&amp;nbsp;X – bao gồm cả xử lý tập tin, mạng, xây dựng chuỗi và nhiều tính năng khác nữa.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Giao diện duy nhất của&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;&amp;nbsp;có nghĩa rằng&amp;nbsp;&lt;strong&gt;Cocoa Touc&lt;/strong&gt;h dùng để tạo ra có GUI có thiết kế độc đáo để phù hợp chỉ cho các thiết bị chạy&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;. Sử dụng&amp;nbsp;&lt;strong&gt;UIKit&lt;/strong&gt;&amp;nbsp;bạn có quyền truy cập vào các điều khiển giao diện cảm ứng đa chạm, nút bấm, và xem toàn màn hình trên&amp;nbsp;&lt;strong&gt;iOS&lt;/strong&gt;.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-ZTn0T-0jNtg/UymQnESZBFI/AAAAAAAABYk/8YU14H2B534/s1600/framework_layer_2x_details-e1364364410664.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-ZTn0T-0jNtg/UymQnESZBFI/AAAAAAAABYk/8YU14H2B534/s1600/framework_layer_2x_details-e1364364410664.png&quot; height=&quot;295&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h4 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 16px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Cocoa Touch và Objective-C&lt;/h4&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Phần lớn&amp;nbsp;&lt;strong&gt;Cocoa Touch&lt;/strong&gt;&amp;nbsp;được tạo bởi&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;, một ngôn ngữ&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;được biên dịch để chạy với tốc độ đáng kinh ngạc. Bởi vì&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;được xây dựng từ&amp;nbsp;&lt;strong&gt;C&lt;/strong&gt;&amp;nbsp;nên sẽ rất dễ dàng để kết hợp&amp;nbsp;&lt;strong&gt;C&lt;/strong&gt;&amp;nbsp;và cả&amp;nbsp;&lt;strong&gt;C++&lt;/strong&gt;&amp;nbsp;vào các ứng dụng&amp;nbsp;&lt;strong&gt;Cocoa Touch&lt;/strong&gt;&amp;nbsp;của bạn.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Khi ứng dụng của bạn chạy,&amp;nbsp;&lt;strong&gt;Objective C&lt;/strong&gt;&amp;nbsp;runtime khởi tạo các đối tượng dựa trên quá trình thi hành logic – không chỉ ra trong quá trình biên dịch. Ví dụ, một ứng dụng&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;chạy có thể tải một interface (một tập tin nib được tạo ra bởi&amp;nbsp;&lt;strong&gt;Interface Builder&lt;/strong&gt;), kết nối các đối tượng Cocoa trong interface vào mã lệnh ứng dụng của bạn, sau đó gọi đúng phương thức mỗi khi UI button&amp;nbsp;được nhấn. Không cần thiết phải biên dịch lại.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Tổng kết toàn bộ các bài học&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Đây không chỉ là phần tổng kết của bài hướng dẫn này mà còn là phần tổng kết của seri bài về các nguyên tắc cơ bản trong&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;. Kết thúc seri này, các bạn đã tìm hiểu được những chủ đề sau:&lt;/div&gt;&lt;ul style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; list-style-type: square; margin: 0px; padding: 0px 0px 15px;&quot;&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Nguyên tắc cơ bản của lập trình&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Nguyên tắc cơ bản của&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Lớp và tính thừa kế&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Quản lý bộ nhớ&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Thực hành xây dựng một bài toán đơn giản từ A tới Z&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Một số mở rộng của&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Chúng tôi hy vọng loạt bài này sẽ thực sự có ích cho các bạn mong muốn chinh phục&amp;nbsp;&lt;strong&gt;Apple&lt;/strong&gt;&amp;nbsp;application và chúng tôi khuyên các bạn nên đọc lại seri bài viết này thêm một vài lần nữa để có thể hiểu sâu hơn về&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;trước khi bắt tay vào phát triển các ứng dụng cho iPhone hay iPad.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Thách thức&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Đến thời điểm này, chúng ta đã hoàn tất toàn các bài học nhưng thách thức là vô tận nhất là nếu bạn còn muốn “lên đỉnh” với&amp;nbsp;&lt;strong&gt;iPhone&lt;/strong&gt;&amp;nbsp;application. Chúng tôi sẽ đánh giá cao các bạn nếu các bạn quyết định sẽ xây dựng một ứng dụng đầu tiên ngay sau seri bài này. Xin chúc các bạn thành công với&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;và&amp;nbsp;&lt;strong&gt;iPhone&lt;/strong&gt;&amp;nbsp;application.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #141414; line-height: 20.533334732055664px; margin: 0px; padding: 0px; text-align: right;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: grey;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background: #b6d7a8; border-radius: 10px; padding: 15px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: red; padding-right: 10px;&quot;&gt;Lưu ý:&lt;/span&gt;&lt;span style=&quot;color: #444444; padding-right: 10px;&quot;&gt;Series 6 bài viết về lập trình Objective-C này được sưu tầm từ nguồn trang:&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;i&gt;&lt;a href=&quot;http://az4you.wordpress.com/&quot;&gt;http://az4you.wordpress.com&lt;/a&gt;. Loạt bài viết nhằm phục vụ cho các bạn những kiến thức cơ bản ban đầu trước khi bắt tay vào học lập trình ứng dụng cho iOS (iPhone/iPad). ICTSharing xin thay mặt những người yêu lập trình Objective C gửi lời cảm ơn tới các tác giả gốc của các bài viết này!&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;Các bạn cần lưu ý, dù là lập trình bằng bất kỳ ngôn ngữ nào, cho thiết bị nào thì nguyên lý cơ bản của nó cũng không có nhiều sự khác biệt, vì thế nếu bạn đã nắm vững một ngôn ngữ thì các ngôn ngữ còn lại sẽ không quá khó khăn nếu bạn thực sự tập trung. Trong thời gian chờ đợi ICTSharing ra mắt các video về hướng dẫn lập trình trên iOS, các bạn hãy tập trung nắm vững các phần cơ bản của ngôn ngữ Objective-C nhé.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/6287491316081611784/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-6-chuan-bi-len-inh-voi-iphone.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/6287491316081611784'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/6287491316081611784'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-6-chuan-bi-len-inh-voi-iphone.html' title='Phần 6: Chuẩn bị “lên đỉnh” với iPhone application'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s72-c/objective-c.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-33283823521155746</id><published>2014-03-18T00:42:00.001+07:00</published><updated>2014-03-21T12:14:38.132+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><title type='text'>Phần 5: “Vật lộn” với việc quản lý bộ nhớ trong Objective-C</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;strong&gt;Chào mừng bạn đến với bài 5 của loạt bài về Objective-C này. Trong bài này, chúng ta sẽ tìm hiểu việc quản lý bộ nhớ, một một phần rất quan trọng của Objective-C (và nhiều ngôn ngữ khác). Hầu hết các ngôn ngữ kịch bản (chẳng hạn như PHP) quản lý bộ nhớ một cách tự động, nhưng Objective-C đòi hỏi rằng chúng ta là cẩn thận với việc sử dụng bộ nhớ của chúng ta. Điều đó có nghĩa là ta phải biết cách tự tạo và giải phóng không gian cho các đối tượng mà chúng ta đang sử dụng.&lt;/strong&gt;&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Phương pháp&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Trong Objective-C, có 2 phương pháp để quản lý bộ nhớ, thứ nhất là dùng reference và thứ hai là dùng garbage collection. Bạn cứ nghĩ đơn giản là 2 cách thức theo kiểu là tự làm hoặc tự động theo môi trường của Objective-C, cụ thể reference counting là chúng ta phải tự làm còn garbage collection là cơ chế tự động và tự động quản lý bộ nhớ trong chương trình của chúng ta. Một lưu ý quan trọng là garbage collection không hoạt động trên iPhone, đó là lý do tại sao chúng tôi sẽ không tập trung nhiều vào phương pháp này. Nếu bạn muốn phát triển chương trình dành cho MacOS, bạn có thể tham khảo thêm các tài liệu trên website dành cho Apple Developer.&lt;br /&gt;&lt;strong&gt;&lt;span id=&quot;more-413&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Cú pháp (Syntax)&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Có nhiều cách thức khác nhau để tạo ảnh hưởng tới việc quản lý bộ nhớ. Trước hết, khi bạn tạo một đối tượng bằng cách sử dụng phương thức “alloc” (tạo mới hoặc copy) thì thực chất là bạn đã cấp cho nó một ô nhớ có thể chứa một sự thể hiện cho đối tượng đó và bạn sẽ là người quản lý đối tượng đó. Điều này cũng đúng trong trường hợp bạn dùng phương thức “retain”. Sau khi bạn tạo đối tượng xong rồi nếu bạn gọi phương thức&amp;nbsp;&lt;code&gt;release&lt;/code&gt;, hoặc&lt;code&gt;autorelease&lt;/code&gt;&amp;nbsp;(sẽ nói thêm về điều này sau) của đối tượng đó, bạn không còn có quyền quản lý đối tượng hoặc đảm nhiệm những công việc liên quan đến đối tượng đó nữa hay đơn giản là toàn bộ ô nhớ dành cho đối tượng đã khởi tạo sẽ bị giải phóng. Đoạn mã lệnh sau sẽ minh họa quá trình alloc một đối tượng:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;Car *myCar = [Car alloc];&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Sau khi chạy câu lệnh này thì chúng ta sẽ chịu trách nhiệm quản lý đối tượng&amp;nbsp;&lt;code&gt;myCar&lt;/code&gt;&amp;nbsp;và tự xây dựng quá trình release (hoặc autorelease) đối tượng trong giai đoạn sau khi không cần sử dụng nó nữa. Điều quan trọng cần lưu ý rằng nếu bạn cố tình tiến hành thao tác release một đối tượng đã được thiết lập để autorelease thì ứng dụng ứng dụng của bạn sẽ lỗi.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Khi chúng ta tạo ra một đối tượng bằng cách sử dụng phương thức alloc, đối tượng xe của chúng ta sẽ có giá trị đếm là 1, có nghĩa là nó sẽ không được deallocate. Câu lệnh sẽ như sau:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;[myCar retain];&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Sau đó, khi có đối tượng mới được tạo, giá trị đếm của chúng ta sẽ tăng lên là 2 còn khi một trong những đối tượng được tạo không còn tồn tại nữa thì giá trị đếm lại giảm đi 1. Chỉ cho đến khi giá trị đếm đó về thành 0 thì đối tượng car mới được deallocate.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Khối lệnh&amp;nbsp;&lt;code&gt;autorelease&lt;/code&gt;&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Khi bạn đã tạo ra một project mới trong&amp;nbsp;&lt;strong&gt;Xcode&lt;/strong&gt;, bạn có thể nhận thấy một số đoạn mã lệnh xuất hiện theo mặc định ví dụ như khối autorelease. Từ những bài trước chúng ta đã gặp nhưng tạm thời bỏ qua và bây giờ là thời điểm ta sẽ tìm hiểu cụ thể xem khối lệnh đó làm gì? Dưới đây là khối lệnh mặc định được thêm vào file main.m:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-7WifPdWUWc8/UymQEZDC_pI/AAAAAAAABYE/VaP4zWyP79I/s1600/autorelease.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-7WifPdWUWc8/UymQEZDC_pI/AAAAAAAABYE/VaP4zWyP79I/s1600/autorelease.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;hoặc bạn có thể chủ động xây dựng kịch bản cho&amp;nbsp;&lt;code&gt;autorealease&lt;/code&gt;&amp;nbsp;như sau:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];&lt;br /&gt;[pool drain];&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Trong đoạn mã trên ta sẽ thấy khi cần tạo ra khối lệnh xử lý&amp;nbsp;&lt;code&gt;autorelease&lt;/code&gt;&amp;nbsp;thì ở trong câu lệnh thứ nhất chúng ta sẽ tạo một đối tượng từ lớp&amp;nbsp;&lt;code&gt;NSAutoReleasePool&lt;/code&gt;&amp;nbsp;tên là pool và và câu lệnh thứ 2 sẽ kết thúc khối lệnh xử lý&lt;code&gt;autorealse&lt;/code&gt;&amp;nbsp;với lời gọi phương thức&amp;nbsp;&lt;code&gt;drain&lt;/code&gt;&amp;nbsp;của đối tượng&amp;nbsp;&lt;code&gt;pool&lt;/code&gt;. Các câu lệnh mà khai báo trong phạm vi của 2 câu lệnh trên sẽ chịu ảnh hưởng của quá trình&amp;nbsp;&lt;code&gt;autorelease&lt;/code&gt;&amp;nbsp;và cụ thể là chúng ta sẽ thấy nếu như các đối tượng được khởi tạo trong phạm vi này nếu như mà không còn có tham chiếu đến nó nữa thì nó sẽ tự động được release ra khỏi bộ nhớ mà chúng ta không cần phải tự viết thao tác release cho từng đối tượng.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Giá trị&amp;nbsp;&lt;code&gt;retainCount&lt;/code&gt;&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Trước khi chúng tôi kết thúc, chúng ta hãy nhìn vào một cái gì đó mà có thể giúp làm cho bộ nhớ một chương quản lý dễ dàng hơn. Cho đến bài này chúng tôi đã tạo ra đối tượng và chúng tôi cũng biết có bao nhiêu bản thể hiện của đối tượng một đối tượng, nhưng làm thế nào để chỉ ra con số cụ thể đó? Đơn giản thôi, trên đối tượng thể hiện của chúng ta có một thuộc tính là&amp;nbsp;&lt;code&gt;retainCount&lt;/code&gt;&amp;nbsp;và việc còn lại là ta chỉ cần in giá trị đó ra.&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;NSLog (@&quot;retainCount for car object:% d&quot;, [myCar retainCount]);&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;code&gt;retainCount&lt;/code&gt;&amp;nbsp;trả về một số nguyên, vì vậy chúng tôi sử dụng&amp;nbsp;&lt;code&gt;%d&lt;/code&gt;&amp;nbsp;để hiển thị giá trị trong phần định dạng.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Tổng kết&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Thực sự việc quản lý bộ nhớ đối với hầu hết các ngôn ngữ đều là những vấn đề khá hóc búa. Một bài học chưa thể hướng dẫn chi tiết mọi vấn đề liên quan đến quản lý bộ nhớ. Vì vậy, chúng tôi có lời khuyên với những bạn mới học nên tạm cứ sử dụng những cơ chế tự động có sẵn trong Objective-C và khi đã có kinh nghiệm thì chúng ta sẽ đọc thêm tài liệu để tìm hiểu kỹ hơn về vấn đề này.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Đến đây là kết thúc bài học thứ 5 và để có thể tìm hiểu thêm một số chức năng mở rộng của những lớp thuộc framework Cocoa Touch (giúp cho các bạn muốn phát triển ứng dụng trên iPhone sau này) xin mời các bạn đọc&amp;nbsp;bài học cuối cùng&amp;nbsp;trong seri này.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #141414; line-height: 20.533334732055664px; margin: 0px; padding: 0px; text-align: right;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: grey;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background: #b6d7a8; border-radius: 10px; padding: 15px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: red; padding-right: 10px;&quot;&gt;Lưu ý:&lt;/span&gt;&lt;span style=&quot;color: #444444; padding-right: 10px;&quot;&gt;Series 6 bài viết về lập trình Objective-C này được sưu tầm từ nguồn trang:&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;i&gt;&lt;a href=&quot;http://az4you.wordpress.com/&quot;&gt;http://az4you.wordpress.com&lt;/a&gt;. Loạt bài viết nhằm phục vụ cho các bạn những kiến thức cơ bản ban đầu trước khi bắt tay vào học lập trình ứng dụng cho iOS (iPhone/iPad). ICTSharing xin thay mặt những người yêu lập trình Objective C gửi lời cảm ơn tới các tác giả gốc của các bài viết này!&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;Các bạn cần lưu ý, dù là lập trình bằng bất kỳ ngôn ngữ nào, cho thiết bị nào thì nguyên lý cơ bản của nó cũng không có nhiều sự khác biệt, vì thế nếu bạn đã nắm vững một ngôn ngữ thì các ngôn ngữ còn lại sẽ không quá khó khăn nếu bạn thực sự tập trung. Trong thời gian chờ đợi ICTSharing ra mắt các video về hướng dẫn lập trình trên iOS, các bạn hãy tập trung nắm vững các phần cơ bản của ngôn ngữ Objective-C nhé.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/33283823521155746/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-5-vat-lon-voi-viec-quan-ly-bo-nho.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/33283823521155746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/33283823521155746'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-5-vat-lon-voi-viec-quan-ly-bo-nho.html' title='Phần 5: “Vật lộn” với việc quản lý bộ nhớ trong Objective-C'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s72-c/objective-c.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-74581019780218977</id><published>2014-03-18T00:38:00.001+07:00</published><updated>2014-03-21T21:38:38.140+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><title type='text'>Phần 4: “Tự sướng A2Z” với một chương trình Objective-C hoàn thiện</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;strong&gt;Chào mừng bạn đến với bài học thứ 4 của loạt bài về Objective-C. Qua 3 bài học, chắc hẳn các bạn đã có những khái niệm cơ bản nhất về OOP trong Objective-C. Tiếp tục trong bài này, chúng tôi sẽ hướng dẫn các bạn xây dựng một chương trình hoàn thiện dựa trên những đối tượng bạn đã sử dụng ở&amp;nbsp;&lt;a href=&quot;http://blog.ictsharing.edu.vn/2014/03/phan-2-kham-pha-oop-trong-objective-c.html&quot;&gt;bài học thứ 2&lt;/a&gt;.&lt;/strong&gt;&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Bắt đầu&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Chúng ta sẽ bắt đầu với&amp;nbsp;&lt;strong&gt;Xcode&lt;/strong&gt;&amp;nbsp;và tạo ra một project mới thông qua các các bước&amp;nbsp;&lt;strong&gt;File&amp;gt; New Project&amp;gt; Mac OS X&amp;gt; Application&amp;gt; Command Line Tool&lt;/strong&gt;, tiếp tục đặt tên project là “&lt;strong&gt;TestCar&lt;/strong&gt;” và chọn&amp;nbsp;&lt;strong&gt;Type: Foundation&lt;/strong&gt;.&lt;br /&gt;&lt;strong&gt;&lt;span id=&quot;more-368&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-Jx8-QtlB4RQ/UymOMfhyFfI/AAAAAAAABWs/pPjiXfFgE3U/s1600/new_project.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-Jx8-QtlB4RQ/UymOMfhyFfI/AAAAAAAABWs/pPjiXfFgE3U/s1600/new_project.png&quot; height=&quot;433&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-g7_9vI9GRqM/UymOzfLyN8I/AAAAAAAABW0/4lFCZVA7k-U/s1600/testcar_project.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-g7_9vI9GRqM/UymOzfLyN8I/AAAAAAAABW0/4lFCZVA7k-U/s1600/testcar_project.png&quot; height=&quot;434&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Cuối cùng bạn nhấn vào nút&amp;nbsp;&lt;strong&gt;Create&lt;/strong&gt;&amp;nbsp;để lưu project “&lt;strong&gt;TestCar&lt;/strong&gt;” vào một chỗ cố định trong ổ cứng của bạn. Khi cửa sổ project xuất hiện bên tay trái, chúng ta sẽ cần phải tạo một lớp mới. Để làm được điều ày, bạn cần phải ấn tổ hợp phím&amp;nbsp;&lt;strong&gt;Command-N&lt;/strong&gt;&amp;nbsp;(hoặc vào&amp;nbsp;&lt;strong&gt;File&amp;gt; New File&lt;/strong&gt;), sau đó chọn&amp;nbsp;&lt;strong&gt;MacOS X&amp;gt; Cocoa&amp;gt; Objective-C class&lt;/strong&gt;. Chúng ta sẽ đặt tên cho Class là “&lt;code&gt;Car&lt;/code&gt;” và để mặc định tùy chọn Subclass of là&amp;nbsp;&lt;code&gt;NSObject&lt;/code&gt;&amp;nbsp;(có nghĩa là lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;ta tạo ra sẽ là lớp con của&amp;nbsp;&lt;code&gt;NSObject&lt;/code&gt;). Cuối cùng nhấn button Create để lưu class Car vào thư mục của project TestCar.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-tSR1_adlDCI/UymO7OFU79I/AAAAAAAABW8/lS54d8RL9bY/s1600/car_class.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-tSR1_adlDCI/UymO7OFU79I/AAAAAAAABW8/lS54d8RL9bY/s1600/car_class.png&quot; height=&quot;434&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;Lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;bây giờ đã tạo ra nhưng nó không làm gì cả. Chúng ta sẽ thêm nội dung cho lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;. Tuy nhiên hãy ghi nhớ ở bài 2 chúng tôi đã có nói, Objective-C phân chia riêng biệt mã lệnh tạo một class thành 2 phần: một phần chứa các khai báo thuộc tính và phương thức là interface (file&amp;nbsp;&lt;code&gt;Car.h&lt;/code&gt;) và phần còn lại chứa phần lớp thực thi (file&lt;code&gt;Car.m&lt;/code&gt;). Chúng ta sẽ tiến hành xây dựng interface trước tiên.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Xây dựng Interface&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Chúng ta sẽ mở file&amp;nbsp;&lt;code&gt;Car.h&lt;/code&gt;&amp;nbsp;và trong trạng thái ban đầu, nó sẽ giống ở trạng thái rỗng, có nghĩa là nội dung trong interface chưa có gì cả.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-XHXEpf5lP6I/UymPA6QCUrI/AAAAAAAABXE/EfI8jLpltHo/s1600/empty_car_interface.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-XHXEpf5lP6I/UymPA6QCUrI/AAAAAAAABXE/EfI8jLpltHo/s1600/empty_car_interface.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Trước hết, chúng ta phải khai báo foundation framework để có thể sử dụng được những lớp như&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;,&lt;code&gt;NSMutableString&lt;/code&gt;… Sau đó, chúng ta sẽ tạo ra lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;là lớp con của&amp;nbsp;&lt;code&gt;NSObject&lt;/code&gt;. Trên lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;, chúng ta sẽ tạo ra một số thông tin lữu trữ những đặc tính của đối tượng&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;. Cụ thể là đối tượng xe hơi thường sẽ có những thông tin như sau:&lt;/div&gt;&lt;ul style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; list-style-type: square; margin: 0px; padding: 0px 0px 15px;&quot;&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Make&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Model&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;VIN&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Thực tế thì một chiếc ôtô sẽ có rất nhiều thuộc tính. Tuy nhiên ở đây chúng tôi chỉ xin đề ra 3 thuộc tính rất thông dụng mà mọi ôtô đều có. Đó là thuộc tính make chứa thông tin về hãng xe, model chứa thông tin về mẫu xe và VIN (Vehicle dentification Number). &amp;nbsp;Như vậy ở trên interface Car ta sẽ khai báo 3 thuộc tính sau dòng khai báo interface và nằm trong ngoặc&amp;nbsp;&lt;code&gt;{}&lt;/code&gt;&amp;nbsp;như đoạn mã bên dưới:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-md52VPWvzl8/UymPHc2tkSI/AAAAAAAABXM/oQ6LxNo7AVY/s1600/car_interface_with_attributes.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-md52VPWvzl8/UymPHc2tkSI/AAAAAAAABXM/oQ6LxNo7AVY/s1600/car_interface_with_attributes.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Tuy nhiên để bên ngoài có thể truy xuất giá trị của các thuộc tính thuộc trong lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;thì trên interface&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;ta phải tạo ra các phương thức&amp;nbsp;&lt;code&gt;set...&lt;/code&gt;&amp;nbsp;nhằm có thể thay đổi giá trị thuộc tính và các phương thức&amp;nbsp;&lt;code&gt;get...&lt;/code&gt;&amp;nbsp;nhằm lấy các giá trị thuộc tính của một đối tượng&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;đã khởi tạo.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-a6Q6DGXby0Y/UymPN-VVZLI/AAAAAAAABXU/3os6QdpRj_o/s1600/car_interface_with_get_set_methods.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-a6Q6DGXby0Y/UymPN-VVZLI/AAAAAAAABXU/3os6QdpRj_o/s1600/car_interface_with_get_set_methods.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Ngoài những phương thức&amp;nbsp;&lt;code&gt;get...&lt;/code&gt;&amp;nbsp;và&amp;nbsp;&lt;code&gt;set...&lt;/code&gt;&amp;nbsp;chúng ta có thể tạo thêm cho lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;một số phương thức hoạt động khác ví dụ như:&lt;/div&gt;&lt;ul style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; list-style-type: square; margin: 0px; padding: 0px 0px 15px;&quot;&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;&lt;code&gt;start&lt;/code&gt;&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;&lt;code&gt;addGas&lt;/code&gt;&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;&lt;code&gt;stop&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Các phương thức trên sẽ được khai báo trong interface và ở đây chúng tôi xin áp dụng kiểu trả về là&amp;nbsp;&lt;code&gt;void&lt;/code&gt;&amp;nbsp;cho cả 3 phương thức. Như vậy nội dung mới của interface&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;sẽ như sau:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-a10rghn4uNA/UymPYaY0fDI/AAAAAAAABXc/L29wOwF5qTs/s1600/car_interface_with_attributes_and_methods.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-a10rghn4uNA/UymPYaY0fDI/AAAAAAAABXc/L29wOwF5qTs/s1600/car_interface_with_attributes_and_methods.png&quot; height=&quot;320&quot; width=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;&lt;/h3&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Xây dựng lớp thực thi&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Vì vậy, bây giờ sau khi ta đã khai báo các thuộc tính và phương thức trên interface thì việc tiếp theo của chúng ta là phải khởi tạo nội dung cho các phương thức đã khai báo trong interface. Nhìn lại, chúng ta cần tạo 6 phương thức:&lt;code&gt;setVin&lt;/code&gt;,&amp;nbsp;&lt;code&gt;setMake&lt;/code&gt;,&amp;nbsp;&lt;code&gt;setModel&lt;/code&gt;&amp;nbsp;và&amp;nbsp;&lt;code&gt;vin&lt;/code&gt;,&amp;nbsp;&lt;code&gt;make&lt;/code&gt;,&amp;nbsp;&lt;code&gt;model&lt;/code&gt;. Nội dung của file “&lt;code&gt;Car.m&lt;/code&gt;” như sau:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-vhqoduIw4Qk/UymPidG9ALI/AAAAAAAABXk/IZnAh1QSO7U/s1600/car_class_with_methods5.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-vhqoduIw4Qk/UymPidG9ALI/AAAAAAAABXk/IZnAh1QSO7U/s1600/car_class_with_methods5.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Nếu như các bạn đã tìm hiểu qua về&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;thì đều biết, bất cứ lớp nào được tạo ra đều có constructor có sẵn mặc định (phương thức khởi tạo đối tượng). Lớp Car trong&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;cũng giống như vậy, cho nên ta không cần tạo constructor trong lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;thì vẫn khởi tạo đối tượng&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;&amp;nbsp;được. Tuy nhiên để đảm bảo mỗi đối tượng được khởi tạo sẽ có sẵn những thông tin như chúng ta mong muốn thì ta phải tự xây dựng lại constructor. Cụ thể ta sẽ thêm đoạn mã tạo constuctor như sau:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://2.bp.blogspot.com/-faelG_7T2c4/UymPrgQkcqI/AAAAAAAABXs/sqXIBMcUS4o/s1600/car_class_with_constructor_and_methods.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://2.bp.blogspot.com/-faelG_7T2c4/UymPrgQkcqI/AAAAAAAABXs/sqXIBMcUS4o/s1600/car_class_with_constructor_and_methods.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Xây dựng lớp chính (file&amp;nbsp;&lt;code&gt;main.m&lt;/code&gt;)&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Xin chúc mừng! Nếu bạn đã hoàn tất các bước trên thì bước cuối cùng này sẽ giúp chúng ta kiểm tra lại kết quả mà ta đã xây dựng. Cụ thể trong bước này ta sẽ làm các công việc sau:&lt;/div&gt;&lt;ul style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; list-style-type: square; margin: 0px; padding: 0px 0px 15px;&quot;&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Khởi tạo đối tượng&amp;nbsp;&lt;code&gt;myCar&lt;/code&gt;&amp;nbsp;(một thể hiện của lớp&amp;nbsp;&lt;code&gt;Car&lt;/code&gt;)&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Set và get giá trị các thuộc tính của đối tượng&amp;nbsp;&lt;code&gt;myCar&lt;/code&gt;&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Thực thi các phương thức&amp;nbsp;&lt;code&gt;start&lt;/code&gt;,&amp;nbsp;&lt;code&gt;addGas&lt;/code&gt;&amp;nbsp;và&amp;nbsp;&lt;code&gt;stop&lt;/code&gt;&amp;nbsp;của đối tượng myCar&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Để làm được những điều trên các bạn hãy mở file&amp;nbsp;&lt;code&gt;main.m&lt;/code&gt;&amp;nbsp;và gõ theo nội dung dưới đây:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://4.bp.blogspot.com/-8ZIzaU-8eFY/UymPyuU-lsI/AAAAAAAABX0/n2GuBne3ZVE/s1600/testcar_main.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://4.bp.blogspot.com/-8ZIzaU-8eFY/UymPyuU-lsI/AAAAAAAABX0/n2GuBne3ZVE/s1600/testcar_main.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Sau khi đã hoàn tất viết mã cho lớp main bạn có thể chạy chương trình bằng cách nhấn vào nút&amp;nbsp;&lt;strong&gt;Run&lt;/strong&gt;&amp;nbsp;ở bên trên cửa sổ Project hoặc vào menu&amp;nbsp;&lt;strong&gt;Product&amp;gt; Run&lt;/strong&gt;. Nếu quá trình dịch thành công bạn sẽ nhìn thấy kết quả ở cửa sổ output bên dưới màn hình như sau:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-1uGYlF9WTYw/UymP5a_bc9I/AAAAAAAABX8/BZUFAYSTRyA/s1600/testcar_output.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-1uGYlF9WTYw/UymP5a_bc9I/AAAAAAAABX8/BZUFAYSTRyA/s1600/testcar_output.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #141414; line-height: 20.533334732055664px; margin: 0px; padding: 0px; text-align: right;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: grey;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background: #b6d7a8; border-radius: 10px; padding: 15px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: red; padding-right: 10px;&quot;&gt;Lưu ý:&lt;/span&gt;&lt;span style=&quot;color: #444444; padding-right: 10px;&quot;&gt;Series 6 bài viết về lập trình Objective-C này được sưu tầm từ nguồn trang:&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;i&gt;&lt;a href=&quot;http://az4you.wordpress.com/&quot;&gt;http://az4you.wordpress.com&lt;/a&gt;. Loạt bài viết nhằm phục vụ cho các bạn những kiến thức cơ bản ban đầu trước khi bắt tay vào học lập trình ứng dụng cho iOS (iPhone/iPad). ICTSharing xin thay mặt những người yêu lập trình Objective C gửi lời cảm ơn tới các tác giả gốc của các bài viết này!&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;Các bạn cần lưu ý, dù là lập trình bằng bất kỳ ngôn ngữ nào, cho thiết bị nào thì nguyên lý cơ bản của nó cũng không có nhiều sự khác biệt, vì thế nếu bạn đã nắm vững một ngôn ngữ thì các ngôn ngữ còn lại sẽ không quá khó khăn nếu bạn thực sự tập trung. Trong thời gian chờ đợi ICTSharing ra mắt các video về hướng dẫn lập trình trên iOS, các bạn hãy tập trung nắm vững các phần cơ bản của ngôn ngữ Objective-C nhé.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/74581019780218977/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-4-tu-suong-a2z-voi-mot-chuong.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/74581019780218977'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/74581019780218977'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-4-tu-suong-a2z-voi-mot-chuong.html' title='Phần 4: “Tự sướng A2Z” với một chương trình Objective-C hoàn thiện'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s72-c/objective-c.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-8416965532988700903</id><published>2014-03-18T00:33:00.001+07:00</published><updated>2014-03-21T21:39:17.880+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><title type='text'>Phần 3: “Quan hệ” giữa các đối tượng trong Objective-C</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;strong&gt;Bài trước chúng ta đã nắm được những khái niệm cơ bản về lập trình hướng đối tượng (OOP), đã phân biệt được cách thức tổ chức các đối tượng trong chương trình Objective-C (tách riêng tệp interface và tệp lớp khởi tạo dựa trên interface đó). Trong bài này, chúng ta sẽ tìm hiểu sâu hơn về việc khởi tạo các đối tượng và tính thừa kế.&lt;/strong&gt;&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Con trỏ và khởi tạo đối tượng&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Giả sử chúng ta muốn làm việc với một chuỗi ký tự, cụ thể là các thao tác nhập giá trị và in giá trị của chuỗi đó lên màn hình. Vậy chúng ta sẽ phải làm thế nào? Đoạn mã dưới đây sẽ minh họa điều trên:&lt;br /&gt;&lt;strong&gt;&lt;span id=&quot;more-325&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-yF4qZA946Ck/UymNkLhuzJI/AAAAAAAABWI/QCPsMKILfXA/s1600/pointer_initializing1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-yF4qZA946Ck/UymNkLhuzJI/AAAAAAAABWI/QCPsMKILfXA/s1600/pointer_initializing1.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Chương trình trên được tạo trong&amp;nbsp;&lt;strong&gt;Xcode&lt;/strong&gt;&amp;nbsp;bằng cách vào&lt;strong&gt;&amp;nbsp;File&amp;gt; New Project&amp;gt; Mac OS X&amp;gt; Application&amp;gt; Command Line&amp;gt; Type: Foundation&lt;/strong&gt;&amp;nbsp;(khá là đơn giản) và gõ nội dung của chương trình trên vào file&amp;nbsp;&lt;strong&gt;main.m&lt;/strong&gt;&amp;nbsp;(lớp chạy chính của project).&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Tiếp theo chúng ta sẽ tìm hiểu cụ thể cấu trúc của một chương trình viết bằng&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;. Chương trình&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;được xây dựng theo kiểu&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;nên bao gồm nhiều lớp (file có đuôi là .m), trong đó không thể thiếu được một lớp chạy chính đó là&amp;nbsp;&lt;code&gt;main.m&lt;/code&gt;&amp;nbsp;(file này mặc định được tạo sẵn trong project mới).&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Dòng đầu tiên của file&amp;nbsp;&lt;code&gt;main.m&lt;/code&gt;&amp;nbsp;là dòng khai báo sử dụng các thư viện chứa các đối tượng có sẵn&amp;nbsp;(API)&amp;nbsp;trong&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;hoặc do ta tạo ra. Cụ thể ở ví dụ trên, chúng ta sẽ báo với compiler biết rằng trong chương trình sẽ sử dụng các API cơ bản của&amp;nbsp;&lt;strong&gt;foundation framework&lt;/strong&gt;&amp;nbsp;(&lt;code&gt;foundation.h&lt;/code&gt;)&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;#import&amp;nbsp;&lt;foundation oundation.h=&quot;&quot;&gt;&lt;/foundation&gt;&lt;/pre&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Để làm việc với một xâu ký tự chúng ta phải tạo ra một con trỏ đến một đối tượng&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;(tham khảo&lt;a href=&quot;http://blog.ictsharing.edu.vn/2014/03/phan-2-kham-pha-oop-trong-objective-c.html&quot;&gt;&amp;nbsp;bài 2&lt;/a&gt;) gọi là&lt;code&gt;testString&lt;/code&gt;. Câu lệnh đầu tiên chỉ là câu lệnh khai báo biến con trỏ tham chiếu đến chuỗi ký tự, thực sự thì chuỗi ký tự chưa được khởi tạo và chưa sẵn sàng để chứa các ký tự. Câu lệnh thứ 2, chúng ta mới khởi tạo tạo ra đối tượng cụ thể có thể chứa chuỗi ký tự.&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;NSString&amp;nbsp;*testString;&lt;br /&gt;testString&amp;nbsp;=&amp;nbsp;[[NSString&amp;nbsp;alloc]&amp;nbsp;init];&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Trên đây là cách viết tắt, còn cách viết đầy đủ thì câu lệnh thứ 2 ta sẽ phải tách làm 2 câu lệnh và cụ thể như sau:&lt;/div&gt;&lt;div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;NSString&amp;nbsp;*testString;&lt;br /&gt;testString = [NSString alloc];&lt;br /&gt;[testString init];&lt;br /&gt;&lt;/pre&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Cách viết này có thể làm bạn bối rối vì đó là cách viết đầy đủ. Bạn có thể dùng theo cách viết ngắn gọn ở trên bằng cách lồng 2 ngoặc [] trên cùng một dòng lệnh. Tiếp tục sau khi đã khởi tạo thành công đối tượng xâu, chúng ta sẽ gán giá trị xâu cố định “Sample Text” cho nó. Cách thức thể hiện thao tác gán như sau:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;testString&amp;nbsp;=&amp;nbsp;@&quot;Sample Text&quot;;&lt;/pre&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Các bạn đã thấy, chúng tôi có thêm ký tự&amp;nbsp;&lt;code&gt;@&lt;/code&gt;&amp;nbsp;trước xâu ký tự là để báo với compiler biết rằng chuỗi văn bản sau&amp;nbsp;&lt;code&gt;@&lt;/code&gt;&amp;nbsp;là một&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;. Như vậy là đối tượng xâu đã có giá trị, vậy làm thế nào ta có thể in giá trị xâu đó ra màn hình? Ở đây ta sẽ không dùng những hàm IO của&amp;nbsp;&lt;strong&gt;C&lt;/strong&gt;&amp;nbsp;mà chúng ta sẽ dùng một đối tượng có sẵn trong&amp;nbsp;&lt;strong&gt;foundation framework&lt;/strong&gt;. Đó là đối tượng&amp;nbsp;&lt;code&gt;NSLog&lt;/code&gt;&amp;nbsp;với cú pháp như sau:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;NSLog(@&quot;testString: %@&quot;, testString);&lt;/pre&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Ở đây, đối tượng&amp;nbsp;&lt;code&gt;NSLog&lt;/code&gt;&amp;nbsp;sẽ in một thông điệp ra màn hình console với cú pháp như trên. Phần trong nháy kép là giá trị xâu cố định và đi theo sau dấu @ và trong nháy kép là vị trí đặt giá trị của biến đối tượng xâu&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;đại diện với ký tự&amp;nbsp;&lt;code&gt;%@&lt;/code&gt;. Đó là quy định khi giá trị của một đối tượng xâu&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;ra màn hình console. Kết thúc phần nháy kép trong&amp;nbsp;&lt;code&gt;NSLog&lt;/code&gt;&amp;nbsp;sẽ là là phần tiếp theo ngăn cách bởi dấu phẩy (,) chứa danh sách các biến con trỏ tham chiếu đến đối tượng chuỗi&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;, cụ thể mỗi một vị trí&amp;nbsp;&lt;code&gt;%@&lt;/code&gt;&amp;nbsp;sẽ in ra được một giá trị của một con trỏ xâu&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;&amp;nbsp;theo đúng thứ tự. Để gỡ rối và chạy chương trình trong&amp;nbsp;&lt;strong&gt;Xcode&lt;/strong&gt;&amp;nbsp;ta nhấn vào nút&amp;nbsp;&lt;strong&gt;Run&lt;/strong&gt;&amp;nbsp;ở góc trái trên phần cửa sổ project và nhìn kết quả ở cửa sổ output bên dưới màn hình&amp;nbsp;&lt;strong&gt;Xcode&lt;/strong&gt;&amp;nbsp;như hình bên dưới:&lt;/div&gt;&lt;div style=&quot;padding: 0px 0px 15px; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-BJr6-OWO2oc/UymNp6PVpaI/AAAAAAAABWQ/XyzacIFXUtE/s1600/teststring_output1.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-BJr6-OWO2oc/UymNp6PVpaI/AAAAAAAABWQ/XyzacIFXUtE/s1600/teststring_output1.png&quot; height=&quot;201&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Kết quả cuối cùng, chương trình sẽ trả về 0, điều này báo với hệ điều hành rằng mọi thao tác trong chương trình đã kết thúc và không có vấn đề bất thường gì cả.&lt;/div&gt;&lt;h3 style=&quot;color: #333333; font-size: 18px; font-weight: normal; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Thừa kế (Inheritance)&lt;/h3&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Ở phần trên các bạn đã thấy cách chúng tôi thao tác với&amp;nbsp;&lt;code&gt;NSString&lt;/code&gt;. Có phải chúng tôi sử dụng các phương thức init? Đúng&amp;nbsp;&lt;code&gt;NSMutableString&lt;/code&gt;,&amp;nbsp;&lt;code&gt;NSArray&lt;/code&gt;&amp;nbsp;và trong thực tế, bất cứ lớp NS nào cũng sử dụng phương thức init. Có vẻ ở đây chúng ta lãng phí rất nhiễu mã lệnh để đưa các phương thức init trong mỗi lớp, điều đó có đúng không? Thực sự là không phải vậy, trong OOP có một khải niệm đó là tính thừa kế (Inherinance), nó cung cấp cho ta một khả năng đó là khi có nhiều lớp có tính chất và hành động giống nhau thì ta sẽ tạo ra một lớp chứa các tính chất và hành động chung đó (lớp này gọi là lớp cha), sau đó các lớp con sẽ thừa kế tới lớp cha và có thể dùng lại các tính chất cũng như hành động của lớp cha mà không phải viết lại bất cứ dòng lệnh nào. Và thực tế là ở trong&amp;nbsp;&lt;strong&gt;foundation framework&lt;/strong&gt;, các lớp thư viện đều có chung một nguồn gốc, có nghĩa là tất cả các lớp đều thừa kế tới một lớp gốc, đó là lớp&amp;nbsp;&lt;code&gt;NSObject&lt;/code&gt;. Tất nhiên quá trình thừa kế này có thể tiếp tục để các lớp con cháu, chắt sẽ thừa kế lớp con của lớp cha. Tuy nhiên sự thừa kế ở đây là sự thừa kế đơn. Có nghĩa là một lớp con chỉ thừa kế một lớp cha mà thôi. Chúng ta sẽ nhìn vào sơ đồ bên dưới để thấy được sự phân câp quan hệ giữa một số lớp cơ bản trong&amp;nbsp;&lt;strong&gt;foundation framework&lt;/strong&gt;. Chúng tôi xin lưu ý rằng: việc nắm vứng sơ đồ qua hệ các class là hết sức quan trọng trong công việc lập trình của bạn sau này.&lt;/div&gt;&lt;div style=&quot;padding: 0px 0px 15px; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-_Zk3bOKVdHg/UymNv6zxoCI/AAAAAAAABWY/TlSHcuhjJ5U/s1600/inheritance.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-_Zk3bOKVdHg/UymNv6zxoCI/AAAAAAAABWY/TlSHcuhjJ5U/s1600/inheritance.png&quot; height=&quot;233&quot; width=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Ở sơ đồ trên, các tác giả của&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;chỉ cần tạo trong&amp;nbsp;&lt;code&gt;NSObject&lt;/code&gt;&amp;nbsp;một phương thức gọi là init và sau đó các lớp con sẽ thừa kế tới lớp&amp;nbsp;&lt;code&gt;NSObject&lt;/code&gt;&amp;nbsp;để dùng lại phương thức init và để đảm bảo các đối tượng con sẽ được khởi tạo một cách đúng đắn giống nhau. Tuy nhiên trong quá trình thừa kế, các lớp con có thể ghi đè hay sửa đổi nội dung một số đặc tính hay phương thức của lớp cha. Đó gọi là thừa kế có cải tiến hay còn gọi là ghi đè phương thức (&lt;strong&gt;method overiding&lt;/strong&gt;). Lý do của việc này theo phương pháp lập trình&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;khi các lớp con cùng thừa kế một lớp cha nhưng nó vẫn muốn đảm bảo tính đa dạng hay hay đa hình của các đối tượng con khi tạo ra có thể khác nhau chút xíu từ hình thức đến một số chi tiết hoạt động. Việc này hoàn toàn là hợp lệ và rất hiệu quả bời vì chúng ta hoàn toàn có thể tạo ra một lớp mới dựa trên những lớp đã có sẵn nhưng chúng ta cũng có thể thêm một số gia vị khác ở trên những lớp con đó và tạo nên sự đặc trưng riêng của những lớp do ta tạo nên. Việc này thực chất rất gần gũi với quan hệ giữa các đối tượng trong đời sống thực. Ví dụ bài toán quản lý phương tiện (Vehicle), tất cả các phương tiện sẽ đều có những tính chất chung giống nhau nên ta tạo ra một lớp vehicle đóng vai trò là lớp cha và sau đó ta sẽ tạo ra những lớp con như Car, Bus, Truck… sẽ có cùng chung đặc điểm của lớp vehicle nhưng lại có một số đặc điểm và hoạt động chi tiết khác nhau. Ví dụ sau sẽ minh họa lớp Bus thừa kế tới lớp Vehicle:&lt;/div&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-dV539lm3k1I/UymN4L9QPXI/AAAAAAAABWk/UUuyyFd8Pq0/s1600/class_inheritance.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-dV539lm3k1I/UymN4L9QPXI/AAAAAAAABWk/UUuyyFd8Pq0/s1600/class_inheritance.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;h3 style=&quot;color: #333333; font-size: 18px; font-weight: normal; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Tổng kết&lt;/h3&gt;&lt;div style=&quot;padding: 0px 0px 15px;&quot;&gt;Cho đến thời điềm này, chúng tôi chắc các bạn đã nắm được một số nguyên tắc cơ bản của&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;trong&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;. Để có thể kiểm tra những kiến thức mình đã học, xin mời các bạn trả lời một số câu hỏi sau:&lt;/div&gt;&lt;ul style=&quot;list-style-type: square; margin: 0px; padding: 0px 0px 15px;&quot;&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Sự khác biệt giữa một lớp và một đối tượng là gì?&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Tại sao chúng ta sử dụng các lớp?&lt;/li&gt;&lt;li style=&quot;list-style-type: square; margin: 0px 0px 0px 20px; padding: 0px;&quot;&gt;Tại sao phải sử dụng tính thừa kế?&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #141414; line-height: 20.533334732055664px; margin: 0px; padding: 0px; text-align: right;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: grey;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background: #b6d7a8; border-radius: 10px; padding: 15px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: red; padding-right: 10px;&quot;&gt;Lưu ý:&lt;/span&gt;&lt;span style=&quot;color: #444444; padding-right: 10px;&quot;&gt;Series 6 bài viết về lập trình Objective-C này được sưu tầm từ nguồn trang:&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;i&gt;&lt;a href=&quot;http://az4you.wordpress.com/&quot;&gt;http://az4you.wordpress.com&lt;/a&gt;. Loạt bài viết nhằm phục vụ cho các bạn những kiến thức cơ bản ban đầu trước khi bắt tay vào học lập trình ứng dụng cho iOS (iPhone/iPad). ICTSharing xin thay mặt những người yêu lập trình Objective C gửi lời cảm ơn tới các tác giả gốc của các bài viết này!&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;Các bạn cần lưu ý, dù là lập trình bằng bất kỳ ngôn ngữ nào, cho thiết bị nào thì nguyên lý cơ bản của nó cũng không có nhiều sự khác biệt, vì thế nếu bạn đã nắm vững một ngôn ngữ thì các ngôn ngữ còn lại sẽ không quá khó khăn nếu bạn thực sự tập trung. Trong thời gian chờ đợi ICTSharing ra mắt các video về hướng dẫn lập trình trên iOS, các bạn hãy tập trung nắm vững các phần cơ bản của ngôn ngữ Objective-C nhé.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/8416965532988700903/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-3-quan-he-giua-cac-oi-tuong-trong.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/8416965532988700903'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/8416965532988700903'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-3-quan-he-giua-cac-oi-tuong-trong.html' title='Phần 3: “Quan hệ” giữa các đối tượng trong Objective-C'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s72-c/objective-c.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6343902192363257878.post-4861309811727116701</id><published>2014-03-17T23:45:00.002+07:00</published><updated>2014-03-21T12:11:55.438+07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="Objective-C"/><title type='text'>Phần 2: “Khám phá” OOP trong Objective-C</title><content type='html'>&lt;div class=&quot;separator&quot; style=&quot;clear: both; display: none; text-align: center;&quot;&gt;&lt;a href=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s1600/objective-c.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;strong style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px;&quot;&gt;Kết thúc bài 1 các bạn đã nắm được một số nguyên tắc cơ bản của ngôn ngữ C cũng như Objective-C. Trong bài học thứ 2 này, chúng ta sẽ tập trung tìm hiểu: tại sao Objective-C lại trở thành một ngôn ngữ tuyệt vời trong việc phát triển phần mềm, đặc biệt là những phần mềm trên MacOS và iOS? Cụ thể, chúng ta sẽ thảo luận về các nguyên tắc cơ bản của lập trình hướng đối tượng và làm thế nào để tạo ra một lớp hay gửi các thông điệp cho các đối tượng khác nhau trong chương trình Objective-C.&lt;/strong&gt;&lt;br /&gt;&lt;strong style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px;&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Lập trình hướng đối tượng (OOP)&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Tại sao chúng ta lại dùng&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;? Tại sao không chỉ sử dụng mỗi ngôn ngữ&amp;nbsp;&lt;strong&gt;C&lt;/strong&gt;? Đơn giản vì&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;là ngôn ngữ&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;mà&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;giờ là một phương pháp lập trình hiện đại với rất nhiều ưu thế để các LTV có thể sử dụng trong quá trình phát triển phần mềm.&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;là một mô hình lập trình mà cho phép các nhà phát triển phần mềm có thể suy nghĩ và lựa chọn cách thức thiết kế một phần mềm theo hướng các đối tượng (&lt;strong&gt;objects&lt;/strong&gt;) và các thuộc tính (&lt;strong&gt;attributes&lt;/strong&gt;) của nó mà không theo cách truyển thống là phân tích dựa trên các biến dữ liệu và chức năng. Nói một cách đơn giản là&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;tiếp cận một bài toán cụ thể dưới cách nhìn là các đối tượng chứ không nhìn cụ thể ngay các chức năng và dữ liệu. Cụ thể,&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;cố gắng để có được trừu tượng hóa dữ liệu (&lt;strong&gt;data abstraction&lt;/strong&gt;), đóng gói (&lt;strong&gt;packaging&lt;/strong&gt;), mô đun (&lt;strong&gt;modularity&lt;/strong&gt;), đa hình (&lt;strong&gt;polymophism&lt;/strong&gt;) và thừa kế (&lt;strong&gt;inheritance&lt;/strong&gt;). Nếu mà đi sâu vào chủ đề của&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;thì chúng tôi cam đoan rằng nói cả ngày sẽ không hết. Cho nên chúng tôi xin giải thích đơn giản qua các ví dụ.&lt;br /&gt;&lt;strong&gt;&lt;span id=&quot;more-287&quot;&gt;&lt;/span&gt;&lt;/strong&gt;&lt;br /&gt;Hãy tưởng tượng rằng bạn muốn mua một chiếc xe hơi (car) và bạn có thể nghĩ xe của bạn như một đối tượng. Có rất nhiều xe khác trên thế giới và thậm chí bạn có thể sở hữu nhiều hơn một. Hãy thử tưởng tượng xem chiếc xe hơi bạn định mua có những tính chất khác nhau như: mô hình, động cơ loại màu sắc, và nhiều hơn nữa. Về Lập trình hướng đối tượng, chúng ta gọi quá trình diễn tả này là trừu tượng hóa khái niệm một chiếc xe &amp;nbsp;thành một “lớp” (class) và khi bạn sở hữu thực sự một chiếc xe thì khi đó bạn sẽ đã có được một chiếc xe có với hình ảnh, chất liệu và máy móc thật và nó gọi là một sự thể hiện của (instantiated object) của lớp xe hơi (car class). Khi một chiếc xe khác mới được sản xuất và bán cho một khách hàng khác thì lại một sự thể hiện (instantiated object ) khác của lớp xe hơi (car class) được tạo ra.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Vì vậy, tại sao chúng ta lại nghĩ theo hướng các đối tượng? Một trong những lý do tốt nhất là bởi vì đây là cách bộ não của bạn tự nhiên quan niệm cuộc sống trong thế giới thực. Trong đời sống thực, hầu hết các hệ thống nghiệp vụ hàng ngày ta thường quan niệm đó là sự tương tác của các đối tượng khác nhau. Vì vậy, chúng ta sẽ có rất nhiều lợi ích khi trừu tượng hóa sự phát triển phần mềm theo cách tương tự như những suy nghĩ trong đời sống thực.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Phân biệt lớp (class) và đối tượng (object)&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Trong&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;, class là một tập hợp các dữ liệu đóng gói và phương pháp tùy chỉnh. Một lớp có thể tổ chức nhiều loại dữ liệu khác nhau, và các phương thức lớp thường (nhưng không phải luôn luôn) thực hiện hành động liên quan đến dữ liệu đó. Trong&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;, một lớp thường bao gồm hai tập tin: một file interface và một file thực thi. Các tập tin giao diện sử dụng phần mở rộng (.h). Theo quy ước interface là nơi mà LTV dùng để khai báo các phương thức và dữ liệu mô tả cho lớp đó. Các tập tin thực thi sử dụng phần mở rộng (.m) theo quy ước là nơi các mã thực thi thực sự sẽ được xây dựng và tất nhiên những mã đó sẽ ghi đè nên những khai báo về phương thức và thuộc tính dữ liệu trong file interface.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Vậy, lớp khác đối tượng ở chỗ nào? Và đối tượng là gì? Thực tế, một đối tượng là một thể hiện của một lớp. Lớp giống như một khuôn mẫu chứa những khai báo về định dạng và nguyên tắc hoạt động và đối tượng được coi như một sản phẩm thực sự được tạo ra từ khuôn mẫu đó. Hãy nhớ lại ví dụ của chúng tôi ở trên với chiếc xe, cụ thể Car là một lớp với những tính chất chung và phương thức hoạt động chung của một cái xe. Tuy nhiên Car vẫn chỉ là ở trên giấy và chưa thành sản phẩm thực tế. Từ lớp Car nhà máy sẽ sản xuất và bán một chiếc xe cho Dans và chúng tôi gọi đó là đối tượng dansCar vì nó là đối tượng thực sự có thể hoạt động ngay được.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Các class (dùng để khởi tạo các đối tượng – object) được tạo bởi các phương thức (methods) và các thuộc tính (abttributes). Nếu bạn đã làm quen với một ngôn ngữ không phải hướng đối tượng, bạn có thể là phải làm quen với một số khái niệm như: phương thức (methods) thì gần giống như với khái niệm chức năng (functions) và các thuộc tính (attributes) thì gần giống như với khái niệm các biến (variables). Tuy nhiên ở trong lập trình C thì dữ liệu và hàm ta có thể khai báo riêng biệt còn trong Objective-C thì dữ liệu và các phương thức hành động phải được đóng gói trong các class.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Giới thiệu một số class được xây dựng sẵn trong Objective-C&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Chắc các bạn sẽ rất ngạc nhiên khi bắt tay vào viết mã lệnh trong&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;vì các đối tượng sẵn có trong foundation framework sao lại có chữ “NS” ở đằng trước. Tại sao lại thế? Phải chăng&amp;nbsp;&lt;strong&gt;Apple&lt;/strong&gt;&amp;nbsp;cố ý tạo ra như thế để bắt các LTV phải viết thêm những câu lệnh dài dòng.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Thực ra không phải là như vậy. Tất cả là do lịch sử. Các&amp;nbsp;class trong foundation framework &amp;nbsp;của Apple được thêm vào phía trước chữ “NS”, đó là chữ viết tắt của&amp;nbsp;&lt;strong&gt;NeXTSTEP&lt;/strong&gt;. Khi Steve Jobs rời Apple, ông thành lập&amp;nbsp;&lt;strong&gt;NeXT&lt;/strong&gt;, tạo ra các máy tính trạm làm việc trên hệ điều hành của nó. Ngôn ngữ&amp;nbsp;&lt;strong&gt;OOP&lt;/strong&gt;&amp;nbsp;được sử dụng để xây dựng hệ điều hành trên máy tính của&amp;nbsp;&lt;strong&gt;NeXT&lt;/strong&gt;&amp;nbsp;có tên là&amp;nbsp;&lt;strong&gt;NeXTSTEP&lt;/strong&gt;&amp;nbsp;(viết tắt là “NS”) và đó cũng là tên của hệ điều hành. Tuy nhiên do&amp;nbsp;&lt;strong&gt;NeXTSTEP&lt;/strong&gt;không được thương mại hóa nhiều nên ít người biết đến. Khi&amp;nbsp;&lt;strong&gt;Apple&lt;/strong&gt;&amp;nbsp;mua lại&amp;nbsp;&lt;strong&gt;NeXTSTEP&lt;/strong&gt;, họ đã quyết định đổi tên ngôn ngữ đó thành&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;và xây dựng hệ điều hành&amp;nbsp;&lt;strong&gt;MacOS X&lt;/strong&gt;&amp;nbsp;dựa trên&amp;nbsp;&lt;strong&gt;NeXTSTEP&lt;/strong&gt;.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Dưới đây là một số class mà chúng ta hay sử dụng:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;NSLog: in ra màn hình console một xâu ký tự&lt;br /&gt;&lt;br /&gt;NSString: lớp chuỗi văn bản không thay đổi&lt;br /&gt;&lt;br /&gt;NSMutableString: lớp chuỗi văn bản có thể thay đổi&lt;br /&gt;&lt;br /&gt;NSArray: lớp mảng của các đối tượng không thay đổi&lt;br /&gt;&lt;br /&gt;NSMutableArray: lớp mảng của các đối tượng có thể thay đổi&lt;br /&gt;&lt;br /&gt;NSNumber: lớp chứa giá trị số…&lt;br /&gt;&lt;/pre&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;&lt;/h3&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Phương thức (Methods)&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Như vậy, chúng ta đã có một “sự thể hiện” (instance) của một chiếc xe, bây giờ chúng ta phải làm gì với nó? Vâng, chúng tôi đổ xăng và khởi động xe và còn rất nhiều việc khác nữa như kiểm tra đèn, phanh… Đổ xăng và khởi động xe chỉ áp dụng cho những chiếc xe mà chúng tôi sở hữu và sử dụng. Điều đó có nghĩa rằng, 2 hành động trên chỉ tác động đến cái xe mà chúng tôi tương tác trực tiếp còn những cái xe khác trên thế giới sẽ không bị tác động và những cái xe đó lại bị tác động bởi người sở hữu và sử dụng chúng. Vì vậy, hành động đổ xăng và khởi động xe được coi như là các các phương thức được thể hiện (instance method) của các đối tượng thể hiện cụ thể (instantiated object). Và tất nhiên còn nhiều phương thức hoạt động của chiếc xe khác nữa mà ta có thể gọi ra, ví dụ: tiến, lùi, phanh, bật đèn, còi…, tuy nhiên chúng ta không thể gọi những hành động mà không được định nghĩa sẵn có trong xe hơi ví dụ như bay hoặc lặn. Tóm lại nếu ta là người sở hữu chiếc xe (chiếc xe đã được khởi tạo) thì chúng ta hoàn toàn có thể kiểm tra mọi thuộc tính cũng như các phương thức hoạt động của chiếc xe.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Trong&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;, chúng ta gọi các phương thức của đối tượng bằng cách gởi thông điệp (passing messages). Ví dụ, khi chúng ta muốn biết có bao nhiêu khí trong bản thể hiện xe của chúng ta, chúng ta sẽ gửi một thông điệp tới bản thể hiện của chiếc xe (instance of car) và thông điệp đó chính là lời gọi một phương thức hoạt động (method) của bản thể hiện của chiếc xe&amp;nbsp;mà ta muốn nó thực thi. Ví dụ như sau:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;[recipient&amp;nbsp;message];&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Các dấu ngoặc vuông cho thấy chúng tôi đang gửi thông điệp. Tham số đầu tiên là đối tượng sẽ nhận được thông điệp này và tham số thứ hai là thông điệp đó thực sự là gì? Cụ thể là sẽ gọi tới phương thức nào của đối tượng được thể hiện “recipient”. Cuối cùng, chúng tôi kết thúc bằng một dấu chấm phẩy như là phổ biến với hầu hết các ngôn ngữ lập trình. Để rõ hơn ví dụ trên ta sẽ xem xét tiếp khi chiếc xe của Dans muốn thêm gas thì chúng ta sẽ làm gì?&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;[dansCar addGas];&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Trong ví dụ trên này, ta giả sử chúng ta đã tạo ra một sự thể hiện của lớp xe hơi (car class) hay đơn giản hơn khi một khách hàng tên là Dans mua một chiếc xe và ta đặt tên cho nó là “dansCar”. Sau đó ta truyển tới đối tượng được thể hiện dansCar này một thông điệp tên là “addGas” hay ngắn gọi là yêu cầu đối tượng danCars thực thi phương thức hành động&amp;nbsp;&lt;code&gt;addGas&lt;/code&gt;&amp;nbsp;và nó tương đương với gọi hàm&amp;nbsp;&lt;code&gt;addCars&lt;/code&gt;&amp;nbsp;trong ngôn ngữ lập trình&amp;nbsp;&lt;strong&gt;C&lt;/strong&gt;&amp;nbsp;hay&amp;nbsp;&lt;strong&gt;Pascal&lt;/strong&gt;.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Thuộc tính (Attributes)&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Như các bạn đã biết, thực tế khi nhắc đến một đối tượng cụ thể thì ta thường hay nhớ đến những đặc điểm hay tính chất cụ thể của đối tượng của đối tượng đó. Giả sử khi nói đến một chiếc xe thì ta thường nhớ đến là chiếc xe của hãng nào, model nào hay như có mã số đăng ký là bao nhiêu? Chính bởi vậy, trong&amp;nbsp;&lt;strong&gt;OOP,&lt;/strong&gt;&amp;nbsp;khi tạo ra các đối tượng để phản ánh trực tiếp các đối tượng trong cuộc sống hay trong một nghiệp vụ nào đó, chúng ta sẽ tạo ra một số thuộc tính để lưu trữ các giá trị mô tả đặc tính của một đối tượng. Tiếp tục với ví dụ đối tượng class Car ta sẽ tạo ra một số attributes như make, model hay vin. Các attributes đều được coi là các giá trị nội bộ có nghĩa là phạm vi truy suất nó chỉ ở trong đối tượng khởi tạo mà thôi. Thông thường để truy suất các attributes từ bên ngoài chúng ta thường tạo ra cặp phương thức get và set để thay đổi và lấy các giá trị của attribute đó.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Câu lệnh sau giúp bạn có thể truy suất vào thuộc tính make của đối tượng thể hiện dansCar:&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;[dansCar getMake];&lt;br /&gt;[dansCar make];&lt;/pre&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Như ta đã thấy ở trên, toàn bộ methods và attributes được đóng gói trong class (encapsulation) và class sẽ quản lý methods và attributes. LTV sau này muốn sử dụng method hay attribute nào sẽ chỉ việc tham chiếu qua đối tượng thể hiện mà không phải quan tâm đến thực sự nội dung của chúng được tạo như thế nào. Tuy nhiên khi có nhiều các lớp có tính chất giống nhau và hành động giống nhau thì ta sẽ làm như thế nào?. Điều này chúng ta sẽ tìm hiểu kỹ ở phần tiếp theo.&lt;/div&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;Interface và lớp khởi tạo (class)&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Theo mặc định, trong&amp;nbsp;&lt;strong&gt;Xcode&lt;/strong&gt;, khi bạn tạo một lớp&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;mới thì trong project của bạn sẽ có hai tập tin. Một là tập tin đại diện cho lớp thực thi với định dạng là (*.m) và tập tin của interface với đinh dạng là (*.h). Về nguyên tắc chung là lớp thực thi sẽ thừa kế các tính chất của interface mà nó import. Chính vì vậy ở trên interface ta sẽ định nghĩa những thuộc tính và những hành động chung đại diện cho một nhóm đối tượng. Sau đó ta sẽ tạo ra một đối tượng thừ kế tới interface và khởi tạo nội dung chi tiết của các phương thức hành động đã được định nghĩa trong interface.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Giả sử ta sẽ tạo một project mới như sau:&amp;nbsp;&lt;strong&gt;File&amp;gt; New Project&amp;gt; Mac OS X&amp;gt; Application&amp;gt; Command Line&amp;gt; Type: Foundation&lt;/strong&gt;&amp;nbsp;. Sau đó ta sẽ tạo một lớp&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;&amp;nbsp;mới bằng cách vào&amp;nbsp;&lt;strong&gt;File&amp;gt; New File&amp;gt; MacOS X&amp;gt; Cocoa&amp;gt; Objective-C class&lt;/strong&gt;. Tiếp đó ta sẽ đặt tên lớp là Car với nội dung như sau:&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;strong&gt;Car Interface&lt;/strong&gt;&amp;nbsp;(Car.h):&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-lfZvH9Yh9Wg/UymNFLhwFNI/AAAAAAAABV4/cHs7pMuUkPU/s1600/interface.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-lfZvH9Yh9Wg/UymNFLhwFNI/AAAAAAAABV4/cHs7pMuUkPU/s1600/interface.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Như trên, chúng ta đã khai báo rằng đây là interface Car, và trong dòng khai báo ta đặt thêm “&lt;code&gt;: NSObject&lt;/code&gt;” có nghĩa là lớp Car do ta tạo sẽ thừa kế từ lớp&amp;nbsp;&lt;strong&gt;NSObject&lt;/strong&gt;&amp;nbsp;(super class của mọi lớp trong&amp;nbsp;&lt;strong&gt;Objective-C&lt;/strong&gt;). Chúng tôi sẽ nói nhiều hơn về thừa kế trong những bài học tới. Trong interface Car ta khai báo các biến có tên là “make”, “model” và “vin” thực chất đây là là cá attribute của interface Car. Dòng tiếp theo có nghĩa trong interface Car có chứa một phương thức&amp;nbsp;&lt;code&gt;addGas&lt;/code&gt;. Tiền tố (void) ở trước có nghĩa là phương thức này không trả về bất cứ giá trị nào khi nó kết thúc thực hiện. Như thế chúng ta đã khai báo interface Car với thuộc tính và phương thức như trên, tất nhiên trong thực tế thì ta có thể thêm nhiều thuộc tính hay phương thức khác như: color, model, run, stop, break… Và như thế khi có bất cứ lớp thực thi nào thừa kế tới interface Car thì chúng đều có thuộc tính và method như trên.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;strong&gt;Car class&lt;/strong&gt;&amp;nbsp;(Car.m):&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: left;&quot;&gt;&lt;a href=&quot;http://3.bp.blogspot.com/-lyVJJv1dqMY/UymNIllL4KI/AAAAAAAABWA/FDV6GnMZOf4/s1600/class.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; src=&quot;http://3.bp.blogspot.com/-lyVJJv1dqMY/UymNIllL4KI/AAAAAAAABWA/FDV6GnMZOf4/s1600/class.png&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Như vậy là lớp thực thi&amp;nbsp;&lt;code&gt;Car.m&lt;/code&gt;&amp;nbsp;là lớp khởi tạo dựa trên interface Car nên ta sẽ phải khởi tạo nội dung của tất cả các phương thức đã được khai báo ở interface Car. Cụ thể, để khởi tạo nội dụng cho phương thức&amp;nbsp;&lt;code&gt;addGas&lt;/code&gt;&amp;nbsp;cho lớp&lt;code&gt;Car.m&lt;/code&gt;, ta phải viết câu lệnh #import “Car.h” ở đầu file và xây dựng phần thân của phương thức&amp;nbsp;&lt;code&gt;addGas&lt;/code&gt;&amp;nbsp;nằm trong dấu ngoặc {}. Khi khai báo phương thức&amp;nbsp;&lt;code&gt;addGas&lt;/code&gt;&amp;nbsp;ta chú ý tiền tố -(void) có ý nghĩa là báo với compiler rằng method này sau khi chạy xong sẽ không trả về giá trị gì. Ở ví dụ trên, nội dung của phương thức đơn giản chỉ là một hành động in ra màn hình console một dòng chữ “Gas is added!”.&lt;/div&gt;&lt;div style=&quot;background-color: white; color: #555555; font-family: Arial, Tahoma, Verdana; font-size: 12px; line-height: 20px; padding: 0px 0px 15px;&quot;&gt;Tuy nhiên để có thể truy suất các thuộc tính hay gọi một phương thức của 1 lớp thì điều trước tiên ta phải tạo một đối tượng thể hiện (instance of object) của lớp đó. Đoạn mã lệnh sau đây sẽ minh họa điều trên (chúng ta sẽ sử dụng lại việc định nghĩa lớp Car ở trên):&lt;/div&gt;&lt;pre class=&quot;brush: lua; highlight: [5, 15];&quot;&gt;Car *myCar = [[Car alloc] init];&lt;br /&gt;[myCar addGas];&lt;/pre&gt;&lt;h3 style=&quot;background-color: white; color: #333333; font-family: Arial, Tahoma, Verdana; font-size: 18px; font-weight: normal; line-height: 20px; margin: 0px 0px 5px; padding: 0px;&quot;&gt;&lt;/h3&gt;&lt;div style=&quot;background-color: white; color: #141414; line-height: 20.533334732055664px; margin: 0px; padding: 0px; text-align: right;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: grey;&quot;&gt;&lt;span style=&quot;font-family: Helvetica Neue, Arial, Helvetica, sans-serif;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;div style=&quot;background: #b6d7a8; border-radius: 10px; padding: 15px;&quot;&gt;&lt;span style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: red; padding-right: 10px;&quot;&gt;Lưu ý:&lt;/span&gt;&lt;span style=&quot;color: #444444; padding-right: 10px;&quot;&gt;Series 6 bài viết về lập trình Objective-C này được sưu tầm từ nguồn trang:&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;&lt;span style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif;&quot;&gt;&lt;span style=&quot;font-size: 14px;&quot;&gt;&lt;i&gt;&lt;a href=&quot;http://az4you.wordpress.com/&quot;&gt;http://az4you.wordpress.com&lt;/a&gt;. Loạt bài viết nhằm phục vụ cho các bạn những kiến thức cơ bản ban đầu trước khi bắt tay vào học lập trình ứng dụng cho iOS (iPhone/iPad). ICTSharing xin thay mặt những người yêu lập trình Objective C gửi lời cảm ơn tới các tác giả gốc của các bài viết này!&amp;nbsp;&lt;/i&gt;&lt;/span&gt;&lt;/span&gt;&lt;i style=&quot;color: #444444; font-family: Arial, Helvetica, sans-serif; font-size: 14px;&quot;&gt;Các bạn cần lưu ý, dù là lập trình bằng bất kỳ ngôn ngữ nào, cho thiết bị nào thì nguyên lý cơ bản của nó cũng không có nhiều sự khác biệt, vì thế nếu bạn đã nắm vững một ngôn ngữ thì các ngôn ngữ còn lại sẽ không quá khó khăn nếu bạn thực sự tập trung. Trong thời gian chờ đợi ICTSharing ra mắt các video về hướng dẫn lập trình trên iOS, các bạn hãy tập trung nắm vững các phần cơ bản của ngôn ngữ Objective-C nhé.&lt;/i&gt;&lt;/div&gt;&lt;br /&gt;</content><link rel='replies' type='application/atom+xml' href='http://blog.ictsharing.edu.vn/feeds/4861309811727116701/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-2-kham-pha-oop-trong-objective-c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/4861309811727116701'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6343902192363257878/posts/default/4861309811727116701'/><link rel='alternate' type='text/html' href='http://blog.ictsharing.edu.vn/2014/03/phan-2-kham-pha-oop-trong-objective-c.html' title='Phần 2: “Khám phá” OOP trong Objective-C'/><author><name>ICTSharing</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='http://3.bp.blogspot.com/-qM4ieelxYbM/UrW1AQay2xI/AAAAAAAAAU0/k09EmMBW1g0/s220/ictsharing_log_transparento.png'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/-ZMhiA1ksHr4/Uycl_INo8cI/AAAAAAAABTs/GRIQ-XNzFg8/s72-c/objective-c.png" height="72" width="72"/><thr:total>0</thr:total></entry></feed>