远泓科技iOS笔试题:Objective-C核心概念解析

4星 · 超过85%的资源 需积分: 0 4 下载量 112 浏览量 更新于2024-09-13 收藏 28KB DOC 举报
"远泓科技的笔试题主要针对iOS软件开发岗位,包含了Objective-C语言的基础概念,内存管理,对象生命周期,以及iOS应用开发中的常见设计模式和方法调用的细节。" 1. 在Objective-C中,`alloc`是用于创建对象并分配内存的,与它语义相反的是`release`,因为`release`是用来减少对象引用计数的,当对象的引用计数为0时,会自动调用`dealloc`进行销毁。`dealloc`是与`alloc`配对使用的方法,因为当对象不再被使用时,需要释放内存。 2. `self.name = "object"` 和 `name = "object"` 的区别在于,前者是通过`self`关键字调用对象的成员属性,后者是直接赋值给局部变量。`self`在这里代表对象本身,所以`self.name`是对对象属性的设置,而`name`如果没有声明为实例变量或属性,则只是栈上的局部变量。 3. `retainCount`是Objective-C中表示对象被引用的次数,但它通常不建议在实际开发中直接使用,因为其值在某些情况下可能不准确。 4. 给出的代码段涉及对象`person`的生命周期管理: - `[Person alloc] init]`: 初始化一个新的person对象,`retainCount`为1。 - `[person retain]`: retainCount增加1,变为2。 - `[person release]`: retainCount减1,变为1。 - `[person release]`: 再次调用release,retainCount减1,若为0,对象会被销毁。 5. `Notification`是iOS中的消息通知机制,用于对象间通信,不需要知道接收者的具体实现,只需发布通知,感兴趣的对象会自动接收。 6. `Delegate`通常用于一对多的关系,即一个对象可以有多个代理对象,用于传递定制的事件或请求。`Notification`适用于多对多关系,任何对象都可以监听并响应特定的通知。 7. `viewDidLoad`在视图控制器的视图被加载到内存时调用,适合初始化视图及其子视图。`viewDidUnload`在内存紧张时调用,视图控制器的视图被卸载,应释放可释放的资源。自定义ViewController时,`viewDidLoad`里设置视图内容,`viewDidUnload`里释放内存占用高的资源。 8. `didReceiveMemoryWarning`在系统认为应用内存不足时被调用,提示视图控制器释放可释放的资源。默认操作是释放可重新加载的数据,比如图片。 9. 预处理指令`#define`定义常量:`#define YEAR_SEC (365 * 24 * 3600)`表示一年的总秒数,不考虑闰年。 10. C语言中的指针声明: - `int a;` 声明一个整型变量。 - `int *a;` 声明一个指向整型变量的指针。 - `int **a;` 声明一个指向指针的指针,也就是指针的指针。 - `int a[10];` 声明一个包含10个整数的数组。 - `int *a[10];` 声明一个包含10个整型指针的数组。 - `int (*a)[10];` 声明一个指向包含10个整数的数组的指针。 - `int (*a)(int);` 声明一个函数指针,该函数接受一个整数作为参数,返回整数值。 - `int (*a[10])(int);` 声明一个包含10个函数指针的数组,每个指针指向接受整数参数并返回整数值的函数。 这些知识点涵盖了Objective-C的基本语法、内存管理、对象生命周期、iOS应用开发中的设计模式以及C语言的指针操作,是iOS开发者必备的基础知识。

void lv_example_scroll_2_dir(void) { #if 1 lv_obj_t* cont = lv_obj_create(lv_scr_act()); lv_obj_set_size(cont, 400, 300); lv_obj_add_flag(cont, LV_OBJ_FLAG_SCROLL_ONE); /*Allow max 1 page swipe*/ lv_obj_set_scroll_snap_x(cont, LV_SCROLL_SNAP_CENTER); /*Snap a page to the center*/ lv_obj_set_scrollbar_mode(cont, LV_SCROLLBAR_MODE_OFF); lv_obj_add_event_cb(cont, scroll_end_event, LV_EVENT_SCROLL_BEGIN/*LV_EVENT_ALL*//*LV_EVENT_SCROLL*//*LV_EVENT_SCROLL_END*/, NULL); lv_obj_add_event_cb(cont, scroll_end_event, LV_EVENT_SCROLL_END, NULL); lv_obj_center(cont); /*A grid for the left center and right pages*/ lv_coord_t col_dsc[] = { LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_CONTENT, LV_GRID_TEMPLATE_LAST }; lv_coord_t row_dsc[] = { LV_GRID_FR(1), LV_GRID_TEMPLATE_LAST }; lv_obj_set_grid_dsc_array(cont, col_dsc, row_dsc); /*Create 5 pages*/ for (int i = 0; i < 10; i++) { lv_obj_t* obj = lv_obj_create(cont); lv_obj_set_size(obj, lv_pct(33), lv_pct(100)); lv_obj_t* label = lv_label_create(obj); lv_label_set_text_fmt(label, "Page %d", i); lv_obj_set_style_border_width(obj, 0, 0); } /*Page 2, 3 hidden, page 4, 0, 1 are placed to the grid */ //lv_obj_add_flag(lv_obj_get_child(cont, 2), LV_OBJ_FLAG_HIDDEN); //lv_obj_add_flag(lv_obj_get_child(cont, 3), LV_OBJ_FLAG_HIDDEN); //lv_obj_set_grid_cell(lv_obj_get_child(cont, 4), LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); //lv_obj_set_grid_cell(lv_obj_get_child(cont, 0), LV_GRID_ALIGN_CENTER, 1, 1, LV_GRID_ALIGN_CENTER, 0, 1); //lv_obj_set_grid_cell(lv_obj_get_child(cont, 1), LV_GRID_ALIGN_CENTER, 2, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(lv_obj_get_child(cont, 0), LV_GRID_ALIGN_CENTER, 0, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(lv_obj_get_child(cont, 1), LV_GRID_ALIGN_CENTER, 1, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(lv_obj_get_child(cont, 2), LV_GRID_ALIGN_CENTER, 2, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(lv_obj_get_child(cont, 3), LV_GRID_ALIGN_CENTER, 3, 1, LV_GRID_ALIGN_CENTER, 0, 1); lv_obj_set_grid_cell(lv_obj_get_child(cont, 4), LV_GRID_ALIGN_CENTER, 4, 1, LV_GRID_ALIGN_CENTER, 0, 1); /*Be sure page 0 is centered*/ lv_obj_scroll_to_view(lv_obj_get_child(cont, 0), LV_ANIM_OFF); }帮我注释一下这段代码

2023-05-31 上传