في هذا الموضوع سنتطرق إلى كابوس اغلب المطورين
الا وهو ال
ذاكرة , الجزء الممل في تطوير البرامج والجزء الأهم كذلك ..
تعتمد ال
ذاكرة على نوعية الأيفون المصمم له التطبيق ( إصدار الفيرموير سيحدد ذلك )
فعلى سبيل المثال , جعل التطبيق لايعمل على إصدارات اقل من 3.2
سيمنع اجهزة 2G من إستخدامه وستتقيد بأجهزة 3G , 3Gs , 4 & 4s
ولكل منهم سعه معينه من ال
ذاكرة (الرامات) , مثال :
الايفون 3Gs
حجم الرامات 256 يسحب النظام الجزء الأكبر ويتبقى لك اقل من 128 MB
لهذا يجب ان يُأخذ الرقم بالحسبان كي لاترفض Apple التطبيق
إدراة الذاكرة ...
Memory Management
قم بتشغيل المشروع الذي انشأناه سابقاً او قم بإنشاء واحد جديد
شرح إنشاء برنامج للأيفون - الدرس الأول - الكمبيوتر الكفي
والأنتقال إلى ClassTest
( قمنا بعمل Class يسمى Cnergey )
و instance يسمى P للمشروع
قمنا بإنشاءه عبر
كود:
Cnergey *p = [Cnergey new];
وهي من اسهل الطرق لإنشاء المشاريع
كود:
Cnergey*p = [[Cnergeyalloc] init];
مع امر Alloc نعطي امر للبدأ بعمل الذاكرة والتهيئة " زيادة" إن كان ضرورياُ للمشروع
وامر Init لتهيئة الذاكرة..
ولكن ماهي الحكمة من هكذا اوامر وخصوصاً التهيئة ؟
امر init ممكن التحكم فيه لإجتياز اساليب الـ init العادية
إطلاق الأساليب ..
عندما نقول Release فنحن نطلب من الكمبيوتر تدمير المشروع , لهذا قد تظهر للكثير اخطاء او يذهب المجهود ادراج الرياح ..
وقد ترى احيانا امر Dealloc في حقل تنفيذ Class وهي جزء من NSObject
والبعض يحتاج لتجاوز هذه العملية .. على سبيل المثال
كود:
-(void) dealloc{
NSLog(@"Bye");
[super dealloc];
}
إذا كنت تنوي تجاوز امر dealloc فتأكد من كتابة super dealloc
في نهاية الامر في الملف ذو الإمداد .h
Autorelease Pools
من خلال Autorelease Pools نستطيع التعامل مع مشاريعنا المطلقة
وهكذا كيف تنشأ Autorelease Pools
كود:
int main (int argc, const char * argv[]) {
NSAutoreleasePool *pool = [[pool alloc] init];
NSLog(@"Hello World")
[pool drain];
return 0;
}
لماذا لا نرسل تطبيقاتنا دئما إلى AP ؟
لأنها تعني ان المشروع مازال قيد العمل ويحتاج للمزيد من الوقت
على سبيل المثال .. لديك وظيفة كهذه في التطبيق
كود:
-(a) something {
A *a [[A alloc] init];
[a release];
return a;
}
فإن قمت بإطلاقة سيحدث خلل في البرنامج Crash لأننا اطلقنا البرنامج والبرنامج سيقوم بإعادته وهكذا
بداية العمل والتحضير
سنقوم بإنشاء تطبيق يقرأ اسمك ويقول Hello
قم بإختيار View-Based Application
وامنحها اسم وليكن على سبيل المثال FirstApp
من resources folder أختر FirstAppViewController.xib
من Library ابحث عن حقل الكتابة " text" وقم بسحبه إلى View” window
ومن ثم قم بالتوسيع
ومن حقل الكتابة اذهب إلى Inspector
ابحث عن
Placeholder واكتب Please, type your name
قم بالعوده إلى ملف FirstAppViewController.h
للتعديل على الواجهه كما نريد
كود:
#import
@interface FistAppViewController : UIViewController {
IBOutlet UITextField * Name;
IBOutlet UILabel * Output;
}
@property (nonatomic, retain) IBOutlet UITextField * Name;
@property (nonatomic, retain) IBOutlet UILabel * Output;
@end
الأن نحن بحاجة لإضافة اسلوب وتأكد من كتابته قبل العلامة @end
كود:
-(IBAction) ProcessName;
بعد الانتهاء , اذهب إلى ملف FirstAppViewController.m
وابحث عن سطر @implementation FirstAppViewController
واكتب
كود:
@synthesize Name;
@synthesize Output;
بعد ذلك نحتاج لكتابة التطبيق
كود:
-(IBAction) ProcessName {
NSString * message = [[NSString alloc]
initWithFormat:@"Hello, %@",Name.text];
[Output setText:message];
[message release];
}
الأن اتممت الجزء الاكبر ولم يتبقى لك سوى الربط فيما بين التصاميم والاوامر
عبر النافذة السوداء
كود:
http://i43.tinypic.com/mrpaif.png
وبعد الانتهاء ... إضغط على Run لتشاهد ماقمت بإنجازة
يتبع ....