عرض مشاركة واحدة
قديم 14-11-2011, 11:46 PM   #1
خبير
 
الصورة الرمزية Cnergey
 
الرتبة الادارية: مشرف منتديات iPhone و iPad
تاريخ التسجيل: 14-08-2008
الدولة: in Your Mind
المشاركات: 15,975
مشاركات الشكر: 12,122
شكر 19,045 مرات في 6,801 مشاركات

الاوسمة التي حصل عليها

شرح إنشاء برنامج للأيفون - الدرس الثاني ( الذاكرة والتحكم )

في هذا الموضوع سنتطرق إلى كابوس اغلب المطورين
الا وهو الذاكرة , الجزء الممل في تطوير البرامج والجزء الأهم كذلك ..

تعتمد الذاكرة على نوعية الأيفون المصمم له التطبيق ( إصدار الفيرموير سيحدد ذلك )

فعلى سبيل المثال , جعل التطبيق لايعمل على إصدارات اقل من 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 العادية


إطلاق الأساليب ..

كود:
[p release];
عندما نقول 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 لتشاهد ماقمت بإنجازة



يتبع ....
Cnergey غير متصل   رد مع اقتباس
عدد 9 من الاعضاء يشكرون Cnergey على مشاركته الطيبة ويطلبون المزيد من هذه المشاركات الرائعة ويدعون له بالتوفيق
مشاهدة/اخفاء قائمة الشكر لهذه المشاركة

اخر 5 مواضيع للعضو Cnergey
الموضوع الاقسام الرد الاخير للعضو الردود مشاهده اخر مشاركة
كوالكم تعلن عن المعالج Snapdragon 820 منتدى الأخبار the dreame 14 7099 12-08-2015 11:42 PM
بطاريات الهواتف الذكية بين قلب المستخدم وخزينة... منتدى الأخبار fly_soul 18 8553 10-04-2015 05:36 AM


اعلان