msumobi2. Лекция 2

943 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
943
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
20
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

msumobi2. Лекция 2

  1. 1. Разработка приложений для iOS Лекция 2 Ещё немного Objective-С. Введение в iOS.#msumobi2 Глеб Тарасов
  2. 2. Вспоминаем
  3. 3. Как вызвать метод startProcess без параметров у объекта в переменной «queue»?
  4. 4. Как вызвать метод startProcess без параметров у объекта в переменной «queue»? [queue startProcess];
  5. 5. Как вызвать методstartProcessWithTimeout с параметром 10?
  6. 6. Как вызвать метод startProcessWithTimeout с параметром 10?[queue startProcessWithTimeout:10];
  7. 7. Как вызвать метод startProcessWithTimeoutandSize с параметрами 10 и 100?
  8. 8. Как вызвать метод startProcessWithTimeoutandSize с параметрами 10 и 100?[queue startProcessWithTimeout:10 andSize:100];
  9. 9. Продолжение Objective-С
  10. 10. ЧислаCGFloat a = 0.5;NSInteger b = -1;NSUInteger q = 10;
  11. 11. ЧислаCGFloat a = 0.5;NSInteger b = -1;NSUInteger q = 10;
  12. 12. ЧислаCGFloat a = 0.5;NSInteger b = -1;NSUInteger q = 10;
  13. 13. СтруктурыCGPoint p;p.x = 10;p.y = 20;p = CGPointMake(10, 20);CGSize s;s.width = 100;s.height = 100;s = CGSizeMake(100, 100);CGRect r;r.size = s;r.origin = p;r = CGRectMake(10, 20, 100, 100);
  14. 14. Стандартные классы
  15. 15. Строки NSString NSMutableStringNSString *a = @"abc";NSString *b = [a stringByReplacingOccurrencesOfString:@"a" withString:@"b"];NSLog(@"b: %@", b);NSMutableString *m = [b mutableCopy];NSRange r;r.length = m.length;r.location = 0;[m replaceOccurrencesOfString:@"c" withString:@"b" options:0 range:r];NSLog(@"m: %@", m);
  16. 16. Списки NSArray NSMutableArray Обычные упорядоченные массивыNSArray *a = @[@"a", @"b", @"c"];NSString *first = a[0];NSString *last = a[[a count] - 1];NSMutableArray *b = [a mutableCopy];[b addObject:@"r"];[b replaceObjectAtIndex:1 withObject:@"q"];[b removeObjectAtIndex:2];
  17. 17. Словари NSDictionary NSMutableDictionary Хранение пар «ключ-значение». Быстрый поиск значения по ключуNSDictionary *dict = @ { @"key1" : @"a", @"key2" : @"b" };NSString *first = dict[@"key1"];NSMutableDictionary *m = [dict mutableCopy];m[@"key3"] = @"c";
  18. 18. Перечисление (enumeration)NSArray *arr = @[@"a", @"b", @"c"];for (NSString *a in arr){ NSLog(@"%@", a);}NSDictionary *dict = @{ @"key1" : @"a", @"key2" : @"b" };for (NSString *key in dict){ NSString *value = dict[key]; NSLog(@"%@ - %@", key, value);}
  19. 19. Числа NSNumberNSNumber *a = @(3);int b = [a intValue];NSNumber *c = @(2.5f);float d = [c floatValue];NSNumber *e = @(3.567);double f = [e doubleValue];if ([a isEqualToNumber:c]) NSLog(@"equals");
  20. 20. Бинарные данные NSData NSMutableData Хранение картинок, текстовых данных в бинарном виде и т.д.NSData *data = [[NSData alloc] initWithContentsOfFile:@"data.txt"];NSInteger length = [data length];[data writeToFile:@"result.txt" atomically:YES];NSMutableData *m = [data mutableCopy];[m appendData:data];
  21. 21. NSNull сохранять «пусто» в массивы и словариNSMutableArray *a = [[NSMutableArray alloc] init];[a addObject:[NSNull null]];NSObject *q = [a lastObject];if (q == [NSNull null]){ //bla bla}
  22. 22. NSValue преобразовывать структуры и другие «не объекты» в объектыCGPoint p = CGPointMake(10, 20);CGRect r = CGRectMake(10, 20, 30, 40);NSValue *v1 = [NSValue valueWithCGPoint:p];NSValue *v2 = [NSValue valueWithCGRect:r];NSArray *arr = [NSArray arrayWithObjects:v1, v2, nil];CGRect r2 = [[arr lastObject] CGRectValue];
  23. 23. Dot notationRectangle *r = [[Rectangle alloc] init];[r setWidth:10];CGFloat w = [r width];
  24. 24. Dot notationRectangle *r = [[Rectangle alloc] init];[r setWidth:10];CGFloat w = [r width];Rectangle *r = [[Rectangle alloc] init];r.width = 10;CGFloat w2 = r.width;
  25. 25. Dot notationКласс Rectangle - float width (число) - float height (число) - Location location (структура)Rectangle *r = [[Rectangle alloc] init];[r setWidth:10];[r setHeight:20];Location l;l.x = 1;l.y = 2;[r setLocation:l];NSLog(@"%g, %g, (%g, %g)", [r width], [r height], [r location].x, [r location].y);
  26. 26. Dot notationRectangle *r = [[Rectangle alloc] init];r.width = 10;r.height = 20;Location l = {1, 2};r.location = l;NSLog(@"%g, %g, (%g, %g)", r.width, r.height, r.location.x, r.location.y);
  27. 27. Классы
  28. 28. User.h
  29. 29. User.h@interface User@end
  30. 30. User.h@interface User : NSObject@end
  31. 31. User.h#import <Foundation/Foundation.h>@interface User : NSObject@end
  32. 32. User.h#import <Foundation/Foundation.h>@interface User : NSObject- (void)deleteProfile;@end
  33. 33. User.h#import <Foundation/Foundation.h>@interface User : NSObject- (void)deleteProfile;- (void)postCommentWithText:(NSString *)text;- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;@end
  34. 34. User.h#import <Foundation/Foundation.h>@interface User : NSObject@property(nonatomic, strong) NSString *name;@property(nonatomic) NSInteger age;- (void)deleteProfile;- (void)postCommentWithText:(NSString *)text;- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;@end
  35. 35. User.h#import <Foundation/Foundation.h>@interface User : NSObject@property(nonatomic, strong) NSString *name;@property(nonatomic) NSInteger age;- (void)setAge:(NSInteger)age;- (NSInteger)age;- (void)deleteProfile;- (void)postCommentWithText:(NSString *)text;- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text;@end
  36. 36. User.m
  37. 37. #import "User.h" User.m@implementation User@end
  38. 38. #import "User.h" User.m@implementation User- (void)setAge:(NSInteger)age{ _age = age; NSLog(@"Установили возраст %d", age);}@end
  39. 39. #import "User.h" User.m@implementation User- (void)setAge:(NSInteger)age{ _age = age; NSLog(@"Установили возраст %d", age);}- (void)deleteProfile{ // удаляем из базы NSString *name = [self name]; NSLog(@"Пользователь %@ удален", name);}- (void)postCommentWithText:(NSString *)text{ [self postCommentWithTopic:@"" andText:text];}- (void)postCommentWithTopic:(NSString *)topic andText:(NSString *)text{ NSLog(@"Пользователь %@ (возраст: %d) с темой %@", self.name, self.age, topic);}@end
  40. 40. Admin.h
  41. 41. Admin.h#import "User.h"@interface Admin : User- (void)deleteComment:(NSInteger)key;@end
  42. 42. Admin.h#import "User.h"@interface Admin : User- (void)deleteComment:(NSInteger)key;@endAdmin.m
  43. 43. Admin.h#import "User.h"@interface Admin : User- (void)deleteComment:(NSInteger)key;@endAdmin.m#import "Admin.h"@implementation Admin- (void)deleteComment:(NSInteger)key{ //удаляем из базы NSLog(@"Комментарий с ключом %d удален", key); // оставляем комментарий, об удалении [self postCommentWithTopic:@"От админа" andText:@"Удалил коммент за хамство"];}
  44. 44. Инициализация объектов
  45. 45. Инициализация объектовUser *user = [[User alloc] init];
  46. 46. Инициализация объектовUser *user = [[User alloc] init];user.age = 34;[user setName:@"Вася Пупкин"];
  47. 47. Инициализация объектовUser *user = [[User alloc] init];user.age = 34;[user setName:@"Вася Пупкин"];NSString *comment = @"Вот такой вот комментарий";[user postCommentWithText:comment];[user deleteProfile];User *user2 = [[User alloc] initWithName:@"Вася Пупкин"];
  48. 48. Собственный инициализатор
  49. 49. Собственный инициализатор- (id)initWithName:(NSString *)name{ self = [super init]; if (self) { self.name = name; } return self;}
  50. 50. Собственный инициализатор- (id)initWithName:(NSString *)name{ self = [super init]; if (self) { self.name = name; } return self;}- (id)init{ return [self initWithName:@"Имя по умолчанию"];}
  51. 51. Методы класса
  52. 52. Методы классаВ файле Admin.h:
  53. 53. Методы классаВ файле Admin.h:+ (Admin *)createAdmin;
  54. 54. Методы классаВ файле Admin.h:+ (Admin *)createAdmin;В файле Admin.m:
  55. 55. Методы классаВ файле Admin.h:+ (Admin *)createAdmin;В файле Admin.m:+ (Admin *)createAdmin{ Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"]; admin.age = 34; return admin;}
  56. 56. Методы классаВ файле Admin.h:+ (Admin *)createAdmin;В файле Admin.m:+ (Admin *)createAdmin{ Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"]; admin.age = 34; return admin;}Использование:
  57. 57. Методы класса В файле Admin.h: + (Admin *)createAdmin; В файле Admin.m:+ (Admin *)createAdmin{ Admin *admin = [[Admin alloc] initWithName:@"Админ Админович"]; admin.age = 34; return admin;}Использование:Admin *admin = [Admin createAdmin];[admin deleteComment:10];
  58. 58. Переменные клаcса (ivar-ы)
  59. 59. Переменные клаcса (ivar-ы)@interface User : NSObject{ NSString *_name;}- (void)setName:(NSString *)name;- (NSString *)name;@end
  60. 60. Переменные клаcса (ivar-ы)@interface User : NSObject{ NSString *_name;}- (void)setName:(NSString *)name;- (NSString *)name;@end@implementation User- (void)setName:(NSString *)name{ _name = name;}- (NSString *)name{ return _name;}@end
  61. 61. Протоколы
  62. 62. Протоколы@protocol SendMessageProtocol <NSObject>- (void)sendMessage:(NSString *)message;@end
  63. 63. Протоколы@protocol SendMessageProtocol <NSObject>- (void)sendMessage:(NSString *)message;@end@interface User : NSObject<SendMessageProtocol>@end
  64. 64. Протоколы@protocol SendMessageProtocol <NSObject>- (void)sendMessage:(NSString *)message;@end@interface User : NSObject<SendMessageProtocol>@end@implementation User- (void)sendMessage:(NSString *)message{ // send message}@end
  65. 65. Протоколы@protocol SendMessageProtocol <NSObject>- (void)sendMessage:(NSString *)message;@end@interface User : NSObject<SendMessageProtocol>@end@implementation User- (void)sendMessage:(NSString *)message{ // send message}@endid<SendMessageProtocol> sender = [[User alloc] init];[sender sendMessage:@"message"];
  66. 66. КатегорииCommentCell.m
  67. 67. КатегорииCommentCell.m@interface CommentCell()@property (strong, nonatomic) UILabel *commentLabel;@end@implementation CommentCell- (void)updateWithText:(NSString *)text{ self.commentLabel.text = text;}@end
  68. 68. Objective-C style guide• Локальные переменные: myLocalVariable• Свойства: myProperty• Классы: MyClass• Методы: doSomethingWith:• Внутренние переменные: • _myLocal • myLocal_ • myLocal
  69. 69. iOS
  70. 70. MVC ControllerView Model
  71. 71. View
  72. 72. UIView@property(nonatomic) CGRect frame;@property(nonatomic) CGRect bounds;@property(nonatomic) CGPoint center;@property(nonatomic,readonly) UIView *superview;@property(nonatomic,readonly,copy) NSArray *subviews;- (void)removeFromSuperview;- (void)addSubview:(UIView *)view;- (void)bringSubviewToFront:(UIView *)view;- (void)sendSubviewToBack:(UIView *)view;@property(nonatomic,copy) UIColor *backgroundColor;@property(nonatomic) CGFloat alpha;@property(nonatomic,getter=isHidden) BOOL hidden;
  73. 73. Иерархия UIView
  74. 74. Стандартные контролы
  75. 75. Controller
  76. 76. UIViewController// The getter first invokes [self loadView] if the view hasnt been set yet.// Subclasses must call super if they override the setter or getter.@property(nonatomic,retain) UIView *view;// This is where subclasses should create their custom view hierarchy// if they arent using a nib.// Should never be called directly.- (void)loadView;- (void)viewWillUnload __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_5_0);// Called after the view has been loaded. For view controllers created incode,// this is after -loadView. For view controllers unarchived from a nib,// this is after the view is set.- (void)viewDidLoad;// Called after the view controllers view is released and set to nil.// For example, a memory warning which causes the view to be purged.// Not invoked as a result of -dealloc.- (void)viewDidUnload __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);- (BOOL)isViewLoaded __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
  77. 77. @interface ViewController : UIViewController@end@implementation ViewController- (void)viewDidLoad{ [super viewDidLoad]; CGRect rect = CGRectMake(20, 20, 100, 100); UILabel *l = [[UILabel alloc] initWithFrame:rect]; l.text = @"text"; [self.view addSubview:l];}- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:animated]; NSLog(@"появился");}- (void)viewWillDisappear:(BOOL)animated{ [super viewWillDisappear:animated]; NSLog(@"пропал");}@end
  78. 78. Наполнение View В коде Interface Builder- (void)viewDidLoad{ [super viewDidLoad]; CGRect rect = CGRectMake(20, 20, 100, 100); UILabel *l = [[UILabel alloc] initWithFrame:rect]; l.text = @"text"; [self.view addSubview:l];}
  79. 79. Interface Builder (демонстрация)
  80. 80. События
  81. 81. target, action- (void)viewDidLoad{ [super viewDidLoad]; [self.button addTarget:self action:@selector(buttonClicked) forControlEvents:UIControlEventTouchUpInside];}- (void)buttonClicked{ NSLog(@"buttonClicked");}
  82. 82. delegate@interface ViewController : UIViewController<UITableViewDelegate>- (void)viewDidLoad{ [super viewDidLoad]; self.tableView.delegate = self;}- (void)tableView:(UITableView *)tableViewdidSelectRowAtIndexPath:(NSIndexPath *)indexPath{ NSLog(@"select row");}
  83. 83. Отрывок UIScrollViewDelegate@protocol UIScrollViewDelegate<NSObject>@optional// any offset changes- (void)scrollViewDidScroll:(UIScrollView *)scrollView;// any zoom scale changes- (void)scrollViewDidZoom:(UIScrollView *)scrollView__OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_2);// called on start of dragging// (may require some time and or distance to move)- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView;...
  84. 84. notificationsСобытие случилось:NSNotificationCenter *center = [NSNotificationCenter defaultCenter];[center postNotificationName:@"UserChanged" object:nil];Ловим событие:NSNotificationCenter *center = [NSNotificationCenter defaultCenter];[center addObserver:self selector:@selector(userChanged) name:@"UserChanged" object:nil];- (void)userChanged{ NSLog(@"Событие произошло");}
  85. 85. Демонстрация IBAction, delegate, IBOutlet
  86. 86. MVC ControllerView Model
  87. 87. MVC Controller outletsView Model
  88. 88. MVC Controller outletsView Model
  89. 89. MVC Controller delegates outletsView Model
  90. 90. MVC Controller delegatestarget,action outlets View Model
  91. 91. MVC Controller delegatestarget,action outlets View Model
  92. 92. MVC Controller delegatestarget,action notifications outlets View Model
  93. 93. AppDelegate @protocol UIApplicationDelegate<NSObject>- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{}- (void)applicationDidBecomeActive:(UIApplication *)application{}- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{}
  94. 94. AppDelegate- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{ self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; UIViewController *vc = [[UIViewController alloc] init]; self.window.rootViewController = vc; [self.window makeKeyAndVisible];}
  95. 95. Практика:Экран просмотра события- класс Event: - title - subtitle - distance - description - image- класс EventViewController - updateWithEvent:
  96. 96. Всё! Глеб Тарасов gleb34@gmail.com twitter.com/pilot34

×