مرجع مقالات طراحی اپلیکیشن

طراحی اپلیکیشن با جدیدترین متدهای روز دنیا

مرجع مقالات طراحی اپلیکیشن

طراحی اپلیکیشن با جدیدترین متدهای روز دنیا

تست UI در Xcode


در Xcode 7 آزمایش UI معرفی شد‌ه‌است، که به شما اذن میدهد یک آزمایش UI را با ضبط نمودن تعاملات انجام یافته طراحی اپلیکیشن در مشهد با UI ساخت‌و‌ساز نمایید. آزمایش UI با یافت کردن اشیا UI برنامه با پرس و جوها، ادغام حادثه ها و بعد ارسال آن ها به آن شی ءها، عمل می نماید. API شما‌را توانمند می سازد تا خاصیت و حالت اشیا UI را رسیدگی نمائید تا آن‌ها‌را با شرایط موردانتظار خویش مقایسه فرمائید.
در ناوبر آزمایش پروژه BullsEye، یک UI Test Target تازه اضافه فرمائید. پژوهش نمائید که Target که بایستی آزمایش گردد، BullsEye باشد. آن‌گاه اسم پیش فرض BullsEyeUITests را بپذیرید.
این خصوصیت را به کلاس BullsEyeUITests اضافه فرمائید:
var app: XCUIApplication!
در تابع setup()، عبارت  XCUIApplication().launch() را با عبارت پایین جایگزین نمایید:
app = XCUIApplication()
app.launch()
اسم testExample() را به testGameStyleSwitch() تغییر‌و تحول دهید.
یک خط تازه در testGameStyleSwitch() ساخت و ساز کرده و روی کلید Record در پایین پنجره وایریشگر کلیک فرمایید.
وقتی که نرم افزار در مشابه ساز نمایان میشود، قسمت Slide از کلید مدل بازی و برچسب بالا را ضربه بزنید. بعد از آن دکمه ضبط Xcode را برای توقف ضبط کلیک نمایید.
فعلا شما سه خط پایین را در testGameStyleSwitch() دارید:
let app = XCUIApplication()
app.buttons[\"Slide\"].tap()
app.staticTexts[\"Get as close as you can to: \"].tap()
در صورتیکه هر عبارت دیگری باشد، آنها‌را حذف فرمائید.
خط 1 خصوصیت را که شما در setup() تولید کردید را اسکن می نماید و نیازی ندارید که شما دیگر چیزی را ضربه بزنید، از این رو خط اولیه را حذف کرده و عبارت .tap() را از انتهای خط 2و 3 را حذف فرمائید. منوی کوچکی را که در کنار [“Slide”] است، گشوده نمائید. مورد segmentedControls.buttons[\"Slide\"] را گزینش فرمائید.
براین اساس آن چه که شما دارید، این میباشد:
app.segmentedControls.buttons[\"Slide\"]
app.staticTexts[\"Get as close as you can to: \"]
این نصیب را برای ساخت و ساز یک قسمت given، تغییر تحول دهید:
// given
let slideButton = app.segmentedControls.buttons[\"Slide\"]
let typeButton = app.segmentedControls.buttons[\"Type\"]
let slideLabel = app.staticTexts[\"Get as close as you can to: \"]
let typeLabel = app.staticTexts[\"Guess where the slider is: \"]
در حال حاضر که شما اسم های دو کلید و دو برچسب قابل تعیین را دارید، آیتم تحت را اضافه نمائید:
// then
if slideButton.isSelected {
XCTAssertTrue(slideLabel.exists)
XCTAssertFalse(typeLabel.exists)

typeButton.tap()
XCTAssertTrue(typeLabel.exists)
XCTAssertFalse(slideLabel.exists)
} else if typeButton.isSelected {
XCTAssertTrue(typeLabel.exists)
XCTAssertFalse(slideLabel.exists)

slideButton.tap()
XCTAssertTrue(slideLabel.exists)
XCTAssertFalse(typeLabel.exists)
}
این نصیب رسیدگی می نماید که وقتی که هر مورد از کلیدها تعیین می‌گردد، برچسب صحیح وجود داشته باشد. آزمایش را اعمال نمایید- مجموع ادعاها می بایست توفیق آمیز باشند.
آزمایش کارایی:
برگرفته از مستندات اپل: آزمایش تلاش بلوکی از کد را که شما می‌خواهید آیتم آنالیز قرار دهید، گرفته و آن را ده توشه جاری ساختن می نماید، معدل مجال ایفا و انحراف از میزان استاندارد را گردآوری می نماید. معدل این اندازه گیری های تکی، یک ارزشی را برای اجرای آزمایش تشکیل میدهد که می‌تواند بعداً در مقایسه با یک واحد سنجش بررسی ناکامی یا این که توفیق، آیتم آنالیز قرار گیرد.
تایپ کردن آزمایش همت بسیار معمولی میباشد. کافی میباشد کدی را که میخواهید چک خواهد شد، درون سیاق measure() قرار دهید.
برای تحقیق عملی این مقاله، پروژه HalfTunes را مجدداً گشوده فرمایید، در HalfTunesFakeTests، مقدار testPerformanceExample() را با آزمایش تحت جایگزین فرمایید:
 // Performance
func test_StartDownload_Performance() {
  let track = Track(name: \"Waterloo\", artist: \"ABBA\",
      previewUrl: \"http://a821.phobos.apple.com/us/r30/Music/d7/ba/ce/mzm.vsyjlsff.aac.p.m4a\")
  measure {
    self.controllerUnderTest?.startDownload(track)
  }
}
آزمایش را انجام نمائید، آن گاه برای دیدن داده های عددی، بر روی آیکونی که در انتهای نصیب measure() نمایان میباشد، کلیک فرمایید.
روی Set Baseline کلیک فرمایید، آن‌گاه دوباره آزمایش کوشش را جاری ساختن نمایید و فیض را مشاهده فرمائید – فیض بایستی خوب یا این که بدتر از مقدار Baseline باشد. کلید Edit به شما اذن می‌دهد مقدار Baseline را برای حاصل نو، reset فرمایید.
مقادیر Baselineها بر طبق تنظیمات هر دستگاه، ذخیره میشود، بدین ترتیب شما میتوانید همین تست را روی یکسری دستگاه متفاوت ایفا دهید.
هر فرصت که شما یک برنامه را تغییر‌و تحول می دهید که ممکن میباشد بر کارایی اسلوب آزمایش گردیده، تأثیر بگذارد، آزمایش تلاش را مجدد ایفا فرمائید.
Code Coverage
ابزار Code Coverage به شما می‌گوید که کدام کدهای برنامه در آزمایش های شما آیتم ایفا قرار گرفته اند. بدین ترتیب شما میدانید که چه بخشهایی از کد برنامه شما هنوز آزمایش تشده میباشد.
برای فعال کردن code coverage، طرح Test action را دستکاری کرده و تیک code coverage را بگذارید.

به روز رسانی یک شیء

به‌دنبال ، قصد داریم نرم افزار خویش را افزایش داده و به مخاطب ، اذن آپ دیت رسانی داده ها دستگاه را بدهیم. به Storyboard رفته و یک segue نو برای سلول جدول ، اضافه می‌کنیم. این segue ، برای تولید رابطه سلول جدول و detail view controller ، به عمل طراحی اپلیکیشن در مشهد می رود. وقتی که استفاده کننده، هر دستگاهی را در table view ، گزینش نماید ، detail view controller ، داده ها دستگاه تعیین گردیده را اکران میدهد.
برای ساخت و ساز تمایز دربین این segue و segue دیگر که برای اضافه کردن یک دستگاه تازه ، به عمل می رود ، یک شناسه به اسم “UpdateDevice” ، تعریف‌و‌تمجید می‌کنیم. آن گاه ، مشی prepareForSegue ، را به پوشه DeviceViewController.m ، اضافه میکنیم.
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
if ([[segue identifier] isEqualToString:@\"UpdateDevice\"]) {
NSManagedObject *selectedDevice = [self.devices objectAtIndex:[[self.tableView indexPathForSelectedRow] row]];
DeviceDetailViewController *destViewController = segue.destinationViewController;
destViewController.device = selectedDevice;
}
}
زمانی که استفاده کننده ، یک دستگاه خاص را در table view ، گزینش می نماید ، اطلاعات از روش segue ، “UpdateDevice”  ، جابجایی داده گردد. آن‌گاه ، داده ها دستگاه تعیین گردیده را بازیابی کرده و آن را به detail view controller ، جابجایی میدهیم.

در‌پی ، یک خصیصه تازه ، برای ذخیره سازی داده ها دستگاه گزینش گردیده ، در فولدر DeviceDetailViewController.h ، اضافه می‌کنیم:

@property (strong) NSManagedObject *device;
طبق مشی ، فرمان synthesis را به پوشه DeviceDetailViewController.m ، اضافه می‌کنیم.

@implementation DeviceDetailViewController
@synthesize device;
برای اکران داده ها دستگاه تعیین گردیده ، می بایست تغییرات پایین را در روال “viewDidLoad”  ، انجام کنیم:

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
if (self.device) {
[self.nameTextField setText:[self.device valueForKey:@\"name\"]];
[self.versionTextField setText:[self.device valueForKey:@\"version\"]];
[self.companyTextField setText:[self.device valueForKey:@\"company\"]];
}

}
بیایید عمل را اینجا ، متوقف کرده و تلاش کنیم مجدد برنامه را انجام کنیم. بعداز فعال‌ساز‌ی نرم افزار ، روی یکی دستگاه ها ضربه میزنیم ، داده ها دستگاه ، می بایست در برگه detail view ، نمایان گردد.



با این حالا ، هنوز فعالیت نرم افزار ، مجموع نشده میباشد. در صورتی کوشش کنیم که داده ها یک دستگاه را بازنویسی نماییم ، داده ها دستگاه ، به صحت ، آپدیت رسانی نخواهد شد. به فولدر DeviceDetailViewController.m  ، بازگشته و اسلوب “save” را تغییر تحول می‌دهیم:

- (IBAction)save:(id)sender {
NSManagedObjectContext *context = [self managedObjectContext];

if (self.device) {
// Update existing device
[self.device setValue:self.nameTextField.text forKey:@\"name\"];
[self.device setValue:self.versionTextField.text forKey:@\"version\"];
[self.device setValue:self.companyTextField.text forKey:@\"company\"];

} else {
// Create a new device
NSManagedObject *newDevice = [NSEntityDescription insertNewObjectForEntityForName:@\"Device\" inManagedObjectContext:context];
[newDevice setValue:self.nameTextField.text forKey:@\"name\"];
[newDevice setValue:self.versionTextField.text forKey:@\"version\"];
[newDevice setValue:self.companyTextField.text forKey:@\"company\"];
}

NSError *error = nil;
// Save the object to persistent store
if (![context save:&error]) {
NSLog(@\"Can\'t Save! %@ %@\", error, [error localizedDescription]);
}

[self dismissViewControllerAnimated:YES completion:nil];
}

Cloud Backend در iOS با استفاده از Parse - بخش دوم

گرد‌همایی بیست و نهم : اضافه کردن Cloud Backend به اپلیکیشن iOS با به کار گیری از Parse – نصیب دوم

این نوشته‌علمی ، نصیب دوم از یادگرفتن Cloud Backend میباشد. در قسمت نخستین از این طراحی اپلیکیشن در مشهد محرمانه آموزشی ، پیشگفتار ای راجع به سرویس ها (Backend BaaS) ارائه نمودیم و اپلیکیشن Recipe را برای به کارگیری از این نوع سرویس ها ، تغییر تحول دادیم. به مکان ذخیره سازی امر پخت ها به طور محلی و در باطن نرم‌افزار ، فرمان پخت ها را به Parse backend ، جابجایی دادیم. اینک ، اپلیکیشن Recipe به Parse متصل میباشد و امر پخت ها ، از cloud دانلود می گردند.

در‌حالتی که نصیب نخستین از این خصوصی آموزشی را تفحص کرده اید ، فعلا می بایست ادراک مبنا ای از Parse SDK را استخراج کرده باشید. در نصیب اولیه ، روش بازیابی شی ها از Parse را فراگیری دادیم. در‌این قسمت ، طرز ذخیره سازی فرمان پخت های نو در Parse backend را علامت خوا هیم اعطا کرد. ولی ، روش حذف امر پخت از cloud را نیز خواهید آموخت.

ما فعالیت بر روی پروژه Xcode را که در قسمت اولیه ساخته ایم ، ادامه خوا هیم بخشید. از این رو ، در شرایطی‌که پروژه و تمرین گرد هم آیی گذشته را اجرا نداده اید ، اکیداً سفارش میشود که یادگرفتن گرد‌همایی قبلی را رسیدگی فرمائید.

بیایید فعالیت را استارت کنیم.

آغاز فعالیت

پیش از این که وارد نصیب کدنویسی شویم ، بیایید به قابلیت و امکان های جدیدی که قرار میباشد جاری ساختن کنیم ، نگاه سریعی بیاندازیم. تا قبل از اینً ، ما یک نرم‌افزار Recipe ساخته ایم که امر پخت ها را از Parse بازیابی کرده و آن‌ها را با به کارگیری از کلاس PFQueryTableViewController ، اکران می‌دهد. درین قسمت ، ما دو امکان دیگر را به اپلیکیشن اضافه خوا‌هیم کرد که عبارتند از :

تولید فرمان پخت تازه و انبارکردن آن در cloud

حذف نمودن امر پخت مو جود از cloud

پیاده سازی رابط کاربری

در رابط کاربری اساسی اپلیکیشن ، تغییرات متعددی را ایفا نکرده ایم. با این اکنون ، برای این که به استفاده کننده این قابلیت را مهیا نماییم که بتواند امر پخت جدیدی را وارد کند ، یک view controller نو ، اضافه خوا‌هیم کرد. View controller تازه با اسم “New Recipe” با ضربه زدن بر روی کلید “+” در رابط کاربری مهم ، فعال میشود. از روش کاغذ نو ساخت‌و‌ساز گردیده ، استفاده کننده می‌تواند داده ها امر پخت را که مشتمل بر اسم ، زمان مجال پخت ، مواد اول و تصویر امر پخت میباشد ، کامل کند.

از آن جایی که نمیخواهیم بر روی مسائل مرتبط با پیاده سازی تمرکز کنیم ، در اینجا ، شیوه ایجاد کرد رابط کاربری را نشانه نخواهیم اعطا کرد. view controller نو ، یعنی “New Recipe” یک پایین کلاس از UITableViewController میباشد و با استعمال از static table view ساخت می‌شود. اما ، ما شما‌را تشویق می‌کنیم که رابط کاربری را خودتان بسازید ، البته ، برای صرفه جویی در حین ، می‌توانید پروژه را از اینجا download the Xcode project from here دانلود فرمائید (آزمایش گردیده در Xcode 4.6.3). فولدر را از موقعیت زیپ بیرون کرده و آن را گشوده فرمائید. سایر این یادگرفتن را به تشکیل داد تمپلت کد ، تخصیص خوا هیم اعطا کرد.

پیش از ادامه فعالیت ، به خیال داشته باشید که application ID و client key را در فولدر RecipeBookAppDelegate.m ، به ID های Parse مربوط به پروژه خویش ، تغییر تحول دهید.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

// Override point for customization after application launch.

[Parse setApplicationId:@\"\"

clientKey:@\"\"];

return YES;}

چرا base internationalization؟

پیش از Xcode 4.5 ، اینگونه مفهومی از base internationalization وجود نداشت. Xcode دسته storyboard ها را برای هر محلی سازی ، تکرار میکرد. یعنی ، در حیث بگیرید اپی که به 5 لهجه محلی سازی گردیده باشد. Xcode 5 تیم از storyboard ها را با هدف ها طراحی اپلیکیشن در مشهد محلی سازی ، ساخت می کند. یک انواع عمده برای روند محلی سازی وجود دارااست. وقتی که نیاز به اضافه کردن یک عنصر UI نو در Storyboard ها داریم ، نیاز خوا هیم داشت یک المان شبیه را برای هر محلی سازی ، اضافه کنیم. این یک پروسه خسته کننده میباشد. به همین برهان میباشد که اپل ، امکان base internationalization را در Xcode 4.5 معرفی کرده است.

با base storyboard تنظیمات گردیده ، اینک استعداد داریم که عملیات محلی سازی به گویش فرانسوی را اجرا دهیم. آغاز ، view controller را در storyboard تعیین میکنیم . آن‌گاه ، به project info گشوده می‌گردیم. روی کلید + از نصیب Localization کلیک کرده و از لیست popup گویش French را تعیین می‌کنیم.

درپی ، از ما منظور می گردد که پوشه های منبع و لهجه مرجع را برای تولید محلی سازی French گزینش نماییم. آیتم ها را مبنی بر تصویر تحت گزینش میکنیم. کل پوشه ها را گزینش کرده و کلید Finish را کلیک می‌کنیم.

پس از ایفا فعالیت ، می بایست دقت خواهد شد که در navigator پروژه ، یک نشان مستطیلی صورت ، پس از MainStoryboard.storyboard ، وجود داراست. آن را پیشرفت می‌دهیم و خوا‌هیم مشاهده کرد که دو base storyboard  و یک پوشه strings از storyboard فرانسوی در آن وجود دارااست.

فولدر فرانسوی strings (یعنی MainStoryboard.strings (French)) را گزینش میکنیم. بایستی یک لیست از فن هایی با دو جفت key/value را می بایست ببینیم:

/* Class = \"IBUILabel\"; text = \"Stephane Mallat\"; ObjectID = \"0N3-up-Ts6\"; */

\"0N3-up-Ts6.text\" = \"Stephane Mallat\";

/* Class = \"IBUINavigationItem\"; title = \"Book Store\"; ObjectID = \"9EY-vY-nyh\"; */

\"9EY-vY-nyh.title\" = \"Book Store\";

/* Class = \"IBUILabel\"; text = \"This book is intended to serve as an invaluable reference for anyone concerned with the application of wavelets to signal processing. It has evolved from material used to teach \\\"wavelet signal processing\\\" courses in electrical engineering departments at Massachusetts Institute of Technology and Tel Aviv University, as well as applied mathematics departments at the Courant Institute of New York University and École Polytechnique in Paris. \"; ObjectID = \"gkh-KY-W1e\"; */

\"gkh-KY-W1e.text\" = \"This book is intended to serve as an invaluable reference for anyone concerned with the application of wavelets to signal processing. It has evolved from material used to teach \\\"wavelet signal processing\\\" courses in electrical engineering departments at Massachusetts Institute of Technology and Tel Aviv University, as well as applied mathematics departments at the Courant Institute of New York University and École Polytechnique in Paris. \";

/* Class = \"IBUIButton\"; normalTitle = \"Buy\"; ObjectID = \"jul-3l-6x7\"; */

\"jul-3l-6x7.normalTitle\" = \"Buy\";

/* Class = \"IBUILabel\"; text = \"A Wavelet Tour of Signal Processing\"; ObjectID = \"xi7-zh-v4N\"; */

\"xi7-zh-v4N.text\" = \"A Wavelet Tour of Signal Processing\";

زمانی که یک محلی سازی تازه را اضافه میکنیم ، Xcode درون base storyboard را کپی می نماید ، مورد های متنی آن ها را برای اعمال محلی سازی ، استحصال می کند و آن‌ها را در باطن پوشه strings قرار میدهد. همانطور که در کدهای فوق می‌بینید ، حرفه های قابل مشاهده از storyboard ها همچون برچسب ، تیتر navigation bar و برچسب کلید در درون پوشه strings گذارده گردیده اند. مجموع موجودیت ها ، دارنده جفت مقادیر key/value میباشند. قسمت اولیه از key مرتبط با ID شیء از گزینه UI است. می‌توانیم object ID از شیء UI را در ذیل نصیب Identity Inspector پیدا کنیم. برای مثال ، object ID از کلید Buy بر پایه ی صورت ذیل میباشد:

با داشتن فولدر strings ساخت گردیده ، شغل ما ترجمه کل مقادیر باطن این فولدر به لهجه فرانسوی میباشد. محتواها از پوشه MainStoryboard.strings برای ایفا محلی سازی به لهجه فرانسوی مبتنی بر محتوای ذیل است:

/* Class = \"IBUILabel\"; text = \"Stephane Mallat\"; ObjectID = \"0N3-up-Ts6\"; */

\"0N3-up-Ts6.text\" = \"Stephane Mallat\";

/* Class = \"IBUINavigationItem\"; title = \"Book Store\"; ObjectID = \"9EY-vY-nyh\"; */

\"9EY-vY-nyh.title\" = \"Librairie\";

/* Class = \"IBUILabel\"; text = \"This book is intended to serve as an invaluable reference for anyone concerned with the application of wavelets to signal processing. It has evolved from material used to teach \\\"wavelet signal processing\\\" courses in electrical engineering departments at Massachusetts Institute of Technology and Tel Aviv University, as well as applied mathematics departments at the Courant Institute of New York University and École Polytechnique in Paris. \"; ObjectID = \"gkh-KY-W1e\"; */

\"gkh-KY-W1e.text\" = \"Comprimer, restaurer et analyser un signal met en jeu des outils mathématiques sophistiqués, allant bien au-delà de la transformée de Fourier. Cet ouvrage mène le lecteur des bases du traitement du signal jusqu\'aux résultats les plus récents, en jouant sur l\'interaction entre les applications, le calcul numérique et les mathématiques. Il est conçu pour des élèves de maîtrise, de DEA ou de doctorat ainsi que pour des ingénieurs ou scientifiques qui analysent des données numériques.\";

/* Class = \"IBUIButton\"; normalTitle = \"Buy\"; ObjectID = \"jul-3l-6x7\"; */

\"jul-3l-6x7.normalTitle\" = \"Acheter\";

/* Class = \"IBUILabel\"; text = \"A Wavelet Tour of Signal Processing\"; ObjectID = \"xi7-zh-v4N\"; */

\"xi7-zh-v4N.text\" = \"Une exploration des signaux en ondelettes\";

محلی سازی تصویر

محلی سازی تصاویر با به کارگیری از Xcode عمل بسیار بی آلایش ای میباشد. همان گونه که در Demo نرم‌افزار دیدید ، میخواهیم تصویر cover را محلی سازی نماییم. تصویر “cover.jpeg” را از navigator پروژه گزینش میکنیم. آن‌گاه ، file inspector را خارج کشیده و به نصیب localization میرویم ، در آنجا یک کلید به اسم “Localize…” را خوا هیم روئت کرد. روی کلید ، کلیک می‌کنیم. از ما تأیید تعیین گویش الگلیسی را می‌خواهد ، روی کلید “Localize” برای اعمال تأیید ، کلیک میکنیم.

آنگاه ، یک مورد French را در نصیب localization خوا‌هیم روءیت کرد. محلی سازی “French” را تعیین می‌کنیم. ما دو نسخه از تصویر cover,jpeg را شاهد آن هستیم.

به finder بر می‌گردیم و وارد دیکشنری پروژه می‌شود. دو فایل را خوا هیم رویت کرد: en.lproj و fr.lproj. هر دو فولدر به صورت خود کار بوسیله Xcode برای ایفا عملیات محلی سازی ، ساخت گردیده اند. فایل en.lproj پوشه های منبع برای محلی سازی انگلیسی میباشند ، در حالی که فولدر fr.lproj مرتبط با فولدر های منبع محلی سازی فرانسوی می‌باشند. در حالتی که نگاهی به هر دو فولدر بیاندازیم ، هر مورد دربردارنده فولدر cover.jpeg می‌باشند. نسخه فرانسوی از تصویر کاور را میتوانید از here دانلود نمایید (یا این که از تصویری که ما در فولدر قرار داده ایم ، به کار گیری نمایید).تصویر کاور دانلود گردیده را نسخه برداری کرده و آن را با تصویر مو جود در فایل fr.lproj جایگزین نمایید.

در حال حاضر ، مجال آزمایش نرم افزار است. در حالتی که کلیه چیز به صحت صورت گرفته باشد ، چیزی که ما در نرم افزار شاهد آن هستیم، محتواها به گویش انگلیسی و فرانسوی خواهند بود.

مقدمه ای بر بلوک های Objective-C

در نرم افزار نویسی ، چیزی که یک گسترش دهنده عالی را از یک بسط دهنده خوب متمایز می نماید ، روشی میباشد که هر مورد از آنان از ابزارهای اپلیکیشن نویسی توسعه یافته ای که گویش متبوع در دست آن‌ها قرار میدهد طراحی اپلیکیشن در مشهد ، استعمال می کنند. Objective-C ، لهجه قانونی برای گسترش نرم افزار آیفون ، آیپد و Mac Operating System میباشد و یک لهجه چند کاربردی ، مربوط به C و بسیار قدرتمندی میباشد. پیشرفت دهندگان مبتدی ، در هنگام استارت عمل با Objective-C ، مفاد بخش اعظمی را برای جستجو دارا‌هستند. با این درحال حاضر ، برنامه نویس ها حرفه‌ای نیز مدام با برخی چیزهای تازه برای یادگیری مواجه میباشند ، به این دلیل‌که این گویش از قابلیت و امکان های های نرم‌افزار نویسی بخش اعظمی دفاع می نماید. یک کدام از این خصوصیات ، توان کدنویسی با استعمال از بلوک ها (Block) میباشد.

بلوک ها ، کشف جدیدی در نرم‌افزار نویسی Objective-C نیستند. آن‌ها در بقیه لهجه های نرم‌افزار نویسی نیز وجود دارا‌هستند (مانند JavaScript) که با عنوان ها دیگری مانند ، Closure ها شناخته میگردند. در iOS ، بلوک ها نخستین دفعه در نسخه 4.0 معرفی شدند و از آن فرصت به شدت گزینه اعتنا و استعمال قرار گرفتند. در ورژن های آجل iOS ، اپل متدهای قاب ورک بخش اعظمی را دستکاری یا این که آپدیت رسانی نمود تا با بلوک ها همخوانی یابند ، و این طور به حیث می‌رسد که بلوک ها ، بخشی از مسیر بعدی کدنویسی باشند. البته حقیقتاً بلوک ها چه چیزی میباشند؟

عالی ، یک بلوک امکان self-contained دارااست و به طور کد غیروابسته است ، و مدام در باطن محدوده ساختار اپ نویسی دیگری مانند بدنه یک اسلوب وجود داراست. کدهای یک بلوک می‌توانند با دنیای فارغ آن تعامل داشته باشند ، البته چیزی که در درون بلوک قراردارد قابل رؤیت برای محدوده سوا آن وجود ندارد. هم اینگونه ، بلوک ها می‌توانند مقادیر متغیرهای که فارغ بدنه آن ها قرار دارا‌هستند را با به کار گیری از یک شیوه خاص تغییر و تحول دهند (بعداً درباره‌ی این قضیه مطالب بیشتری ارائه خوا هیم کرد). بلوک ها دو خصوصیت گران قدر دارا‌هستند:


بلوک ها می‌توانند در طول دیگری ایفا شوند ، خیر صرفا الزاماً در هنگامی که کد محدوده آن‌ها در حالا ایفا شدن می باشند.

کاربرد آن ها در غایت باعث به تایپ کردن کد بسیار تمیزتر و دقیقتر میشود ؛ چون می‌توانند به مکان متدهای نماینده آیتم به کار گیری قرار گیرند ، صرفا در یک جا نوشته می گردند و در فولدر های متعددی توسعه نمی یابند.

با دقت به خصوصیت دوم ، بلوک ها می‌توانند راه‌حل خیر و خوبی برای ساخت callback ها به مکان نمایندگان مهیا نمایند ، چون آنان به صورت بی واسطه در نقطه ای از کد که فراخوانی گردیده اند ، اعلام و طراحی می گردند. با استعمال از بلوک ها ، نیازی به تولید سازش با پروتکل ها ، یا این که طراحی متدهای نماینده وجود ندارد که سبب به کدنویسی بخش اعظمی در درون یک کلاس می گردند. با این هم اکنون ، شایسته ترین کاربرد بلوک ها این میباشد که ، خط مش callback میتواند به صورت بدون واسطه به هر متغیر جان دار در محدوده ای که بلوک در آنجا تعریف و تمجید شد‌ه‌است ، دسترسی داشته و استعمال کند. براین اساس ، دیگر نیازی به جابجایی اطلاعاتی مانند متدهای callback وجود ندارد. با این حالا ، بلوک ها نمی توانند تماما جایگزین نمایندگان شوند ، چون نمی توانند برای هر منظوری به کار گیری شوند. شایسته ترین نحوه این میباشد که ترکیبی از هر دو را داشته باشیم که می‌توانند با تبعیت از بعضی مقررات بی آلایش و با استعمال از تجارب های به دست آمده در حین مجال ، نتیجه ها شوند.


بلوک ها object هایی میباشند که میتوانند در ساختار داده های NSArray و NSDictionary ذخیره گردیده و هم اینگونه ، به متغیرها اختصاص داده شوند.


دو حقیقت وجود داراست که هر بسط دهنده ای درباره‌ی آن ها اعتقاد و باور دارااست ، حتی در صورتیکه درباره بلوک ها هیچ نظری نداشته باشد. نخستین این که ، هر کسی از بلوک ها به کارگیری کرده است ، حتی در صورتیکه از این مسئله اگاهی نداشته باشد. چون ، اپل بلوک ها را به صورت ویژه تحت عنوان دستیارهای تکمیلی برای اکثری از متدهای اساسی و پرکاربرد قرار داده میباشد. دوم این که ، خوشبختانه یا این که متأسفانه ، نیازی به داشتن علم عمیقی در اپلیکیشن نویسی بلوک ها جهت به کار گیری از آن ها مایحتاج وجود ندارد ، کافی میباشد که درکی از کیفیت کارایی آن ها وجود داشته باشد.


بلوک ها تنها یک خصوصیت خارق العاده دارا‌هستند ، و این به عبارتی روش ای میباشد که نوشته می گردند. در حالتی که با این مباحث نا آشنا می باشید ، نگران نباشید ، چون پس از یکسری روز استعمال و تایپ کردن بلوک ها ، در به کار گیری از آنان مانند هر چیز دیگری در Objective-C مهارت خواهید یافت.


در‌این یادگرفتن ، ما دو مقصود را دنبال خوا هیم کرد: برای پر‌نور شدن تک تک مطالب ، از کدهای مربوطه به کار گیری خوا‌هیم نمود، و فراتر از همگی برای آرم دادن این که چه‌گونه می‌توانیم در فعالیت از بلوک ها به کار گیری نماییم ، از نمونه های عملی به کار گیری خوا هیم کرد تا یادگیری شما ریلکس خیس صورت بپذیرد. در حالتی که تا به امروز اپ نویسی بلوک ها را اعمال نداده اید ، بعد از نقطه پایان این فراگیری ، آغاز به اجرا این عمل خواهید نمود.


پس به تلاوت این نوشته‌علمی ادامه دهید تا با مطالب دیدنی و جذابی آشنا گردید.


بازبینی اپلیکیشن

نرم افزار آزمایشی که ما برای هدف ها آموزشی خوا هیم ایجاد کرد ، مشمول تعدادی نصیب میباشد که غیروابسته از یکدیگر می باشند. در واقع ، میتوانیم یک نرم افزار  command-line طراحی نماییم ، ولی ، از آن جایی که میخواهیم برخی UI مربوط به محتوا را نشانه دهیم ، یک نرم‌افزار بسیار بی آلایش را خوا‌هیم ایجاد کرد. پیش از کلیه ، قصد داریم کدهایی بنویسیم که پیام هایی را تنها در debugger نماد میدهند ، فارغ از این که هیچ رابط کاربری خاصی برای آن ها بسازیم. از آن جایی که میخواهیم در شغل تشکیل داد او‌لین بلوک خویش تمرکز نماییم ، لذا قسمت های نرم افزار مشتمل بر یک سری نمونه خرد است که در آن‌ها تنها به حاصل رجوع و برگشت داده گردیده دقت میکنیم. با این اکنون ، از آن جایی که قصد داربم بعضا از task های مربوط به view را جاری ساختن دهیم و میخواهیم که نرم افزار ما تعامل UI را مهیا کند ، از این رو ، بعضی از رابط های کاربری را نیز خوا هیم تشکیل داد. اساسی خیس از کلیه این میباشد که هر قسمت از نرم‌افزار ما بر روی طرز دیگری از به کار گیری از بلوک ها تمرکز خواهد کرد ، از این رو ، تکنیک های مفیدی در کار علامت داده خواهند شد.