fmdb run timer softirq怎么存属性

object - c 语言基础
时间: 13:12:14
&&&& 阅读:563
&&&& 评论:
&&&& 收藏:0
标签:重点知识Engadget(瘾科技)StackOverFlow(栈溢出)Code4Apprespon魏先宇的程序人生第一周快捷键: Alt+上方向键 跳到最上面& Alt+下方向键 跳到最下面 && &&& &Alt+左方向键 跳到最左面&& Alt+右方向键 跳到最右面&& &&& &Alt+shift+方向键& 可以批量复制内容,在按方向键可以删除行&& &&& &command+鼠标& 纵向复制内容userInteractionEnabled& 控件的交互性;类的三大特性 :工程名:首字母一定要大写,如果名字包含多个单词,则每个单词的首字母都要大写。方法名:& 命名规则和属性名(变量名)相同,第一个单词的首字母小写,以后的每个单词的首字母都要大写。#import&&& #import关键字,导入工具&& && 代表导入是系统的工具类的头文件&&& && 代表导入的是自己的类的头文件@"" 代表OC中的字符串逻辑运算 &(与) |(或) !(非)&& 并且&& || 或者&& ! 非 !YES = NO& !NO = YES对于c的函数,非void类型都要使用return return后面的代码都不再执行Control reaches end of non-void function控制到达了非空方法的末尾&&& 表示此方法需要有返回值。必须使用return。.h& header& 头文件&& 作用只是做类的声明,做属性的声明,不做赋值,做方法的声明,不做实现。& 方法分为-实例方法和+类方法。 在类方法中是不允许访问属性(instance variable 实例变量).m& main&&&&& 主文件& 实现文件& 作用:.h不做了,我来做。 方法的实现和属性的赋值(属性的赋值是放在方法中完成)。非ARC下)对于一个方法,在.h未声明,但是在.m中已经实现,则仍然可以调用。执行类中的方法: OC调用方法都使用 [ ]+(eat)&& 1 导入People头文件2 调用+eat方法&&& [类名& 类方法的方法名];-(eat) 1 导入头文件&&& &2 创建对象& People *p = [People alloc];3 对象调用实例方法& [对象名 方法名];Log 日志&&&& %d& %lld % i& %f&%@ 对象类型(指针类型)&NSLog(@"=====%@",p2);&& =====&People: 0x&& %p 输出指针保存的内存地址 pointer 指针& &&NSLog(@"=====%p",p2);&& =====0x声明多个参数的方法: - (int)sum:(int)value1 withSecond:(int)value2;//方法类型 (返回值类型)方法名部分1(参数1类型)参数1名 方法名部分2(参数2类型)参数2名....属性用来使用 (设置属性值,获得属性值)案例:设置一个人的年龄,并且设置之后获得设置后的年龄值。只能通过方法访问属性值。对于对象打点调用属性,所调用的set和get的方法的方法名是固定的:age属性: setAge&&& ageset 和get方法&&&&&&&&对象调用set和get方法&&&&&&&&set 和get方法对象名.属性名(代替调用set和get的方法的一种简易写方法)&&&&&&&&@(属性的声明和实现,代替属性set和get方法)对象名.属性名&&&&&&&&同种类型的属性声明可以写在一起,用逗号分隔。@property float height,@@@synthesize height,age,sex,如果类中存在属性的set和get方法,则对属性设置值和获得值时,可以使用两种方式:1 对象调用set和get方法2 对象打点调用属性 对象名.属性名对象打点调用属性的本质调用属性的set和get方法。在.h中声明的属性变量,在.m中的任何一个方法中都可以使用(+方法除外),这个属性变量一般叫做 全局变量。全局变量(属性) 局部变量(某个方法中定义的变量)局部变量会覆盖全局变量(变量名相同)NSString& 字符串类&&& 声明变量 * 默认是nil ,在控制台上输出的是(null),指针指向的地址是0x0.nil是一个对象指针为空,Nil是一个类指针为空,NULL是基本数据类型为空。NSString 类型 共有的只有NSString,不共有*。@property NSString *name,*name1;内存管理& ARC& Automatic Reference Counting&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& 自动&&&&&&&&&&& 引用&&&&&&&&&&& 计数Xcode 5.x 默认创建工程 支持ARC关闭ARC: Building Setting ---搜索:auto---Objective-C 把ARC改成NO& /& gar 把ARC改成NO(非ARC下)在.m中已经实现但在.h中未声明的方法仍然可以调用。继承的特性:子类继承父类,会继承父类 所有的 属性和方法。self 本类的对象&&& super 父类的对象重写的init方法。目的:把属性的初始化工作直接写在了init方法中。自定义的initWithXX方法。目的:可以对对象的属性进行赋值强制类型转换 :&&&&&& (转换后的类型)需要转换的变量float a = 3.14;&&& int b& = (int)a强制类型转换只能转换指针类型,不能转换它的对象类型People *p = [[People alloc] init];p完成初始化之后再赋给p,那么这时的指针指向的对象就已经是完成初始化之后的对象。init方法是完成系统最基本的初始化工作,比如优化内存等。重写的init方法就能替代多参完成属性赋值的初始化操作。+alloc& -init& 是NSObject的方法&&& People : NSObjectid OC中的弱类型 强 可以接收任意类型,一般接收对象类型(*)alloc和init方法返回值类型都是id的原因是这里返回值不能是固定的类型(People*),任何NSObject的子类People调用alloc或init方法时都返回该类的对象,并且使用People类的指针接收。- (id)init{self = [super init];如果父类初始化成功,则完成 自己的初始化工作。&&& if (self)& //&&& if (self != nil)&&& {&//&&&&& initialize code&&&&&&& age = 18;&&&&&&& sex = YES;&&&&&&& [self eat];&&& }& //& 最后返回的self ,不仅完成了父类的初始化工作,而且也完成自己的初始化工作。&&&}设置自己飞机的移动- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{&&& //获得touch事件&&& UITouch* touch = [touches anyObject];&&& //根据touch事件获得点的坐标&&& CGPoint point = [touch locationInView:self.window];&&& if (CGRectContainsPoint(myPlane.frame, point)) && &{&&&&&&& myPlane.center =&&& }}让键盘下去的方法:1.[_loginPassWordTxt addTarget:self action:@selector(keyBoardLeave) forControlEvents:UIControlEventEditingDidEndOnExit]; 下面实现 keyBoLeave 方法时可以什么都不写2.-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{&&& //当前view结束编辑&&& [self.view endEditing:YES];&&& //当textField失去焦点的时候,键盘也会下去&&& 3.//[_userNameTxt resignFirstResponder];}局部变量的生命周期 从声明开始到方法的结束for循环语句中&&& 可以定义 static& 静态变量& 它只会被初始化一次&&& 会保存在内存里面的 静态存储区i++ i是先使用,后++&&& ++i& i是先++,后使用控件 窗口小部件(组件)& 手机软件中的按钮,标签等,,UI& UserInterface&& 用户接口界面1.标签 显示文字&& 2.按钮& 点击用于触发事件&&&& &3. 文本框& 输入文字&&&&&& &AppDelegate 应用程序代理类&&& 入口类入口类中的didFinishLaunching 入口方法 相当于代替了main方法。CGRect (数据类型)& 结构体typedef(类型定义)&&& struct&& CGRect&& CGRtypedef& a&& b&&& 用b代替a如果想确定一个控件的位置,要么使用frame,要么使用bounds+center,仅仅设置bounds,那么默认center为(0,0),这样只会显示此控件的1/4(右下半)。device& 真机调试3.5 inch iPhone4 4s&&&& 4 inch iPhone 5 5c 5s SE& 4.7 inch iPhone 6 6s& 5.5 inch iPhone 6s& 6spipad1,2& 1024 * 768&& 9.7寸ipad3 ,4& 2048 * 1536ipad mini 1024 * 768&&& 7.9寸ipad mini (retina)2048 * 1536ipad air (ipad 5) 2048 * 寸ipad模拟器:&&&&& iphone 3.5inch&& 320* 480iphone 4inch& & & 320*568iphone 4.7inch&& 375*667
iphone 5.5inch & 540*960
第二周Lab.textAlignment = NSTextAlignmentC& 设置字体居中TextField.placeholder = @"请输入密码";&& 设置隐藏编辑字符TextField.secureTextEntry = YES;&& 设置是否安全键入TextField.borderStyle = UITextBorderStyleRoundedR& 设置边框样式& border& 边角TextField.clearButtonMode = UITextFieldViewModeA&&&&& 设置清除文本框[t addTarget:self action:@selector(XX) forControlEvents:UIControlEventEditingDidEndOnExit];&&& 设置return键取消键盘是否允许剪切&&& earth.clipsToBounds=YES;这个值设置长宽高的一半& earth.layer.cornerRadius=20;字符串判断是否相等& isEqualToString去掉字符串中的空格和空白str = [str stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]]返回参数字符串在原字符串中的位置和长度//返回值是NSRange,类似于CGRect,CGPoint//NSRange有两个属性,location,length//location,参数字符串的第一个字符在原字符串中的位置//length,参数字符串的长度//如果原字符串不包含参数字符串,返回的NSRange的location的值为NSNotFoundif ([urlString rangeOfString:@"code"].location == NSNotFound) {};//substringToIndex,截取字符串,从0开始,到index结束//substringFromIndex,截取字符串,从index开始,到末尾结束//substringWithRange,截取字符串,从location开始,长度为length&textView.text = [resultString substringToIndex:10];#define& 宏定义&&& 分为 常量宏& 函数宏IBAction 绑定方法& IBOutlet& 关键字 关联对象&& (xib中在.h文件中写的)如果xib文件被修改后 需手动加载xib文件 调用 [ ]initWithNibName:@&&&&获取window的方式:1. UIWindow *window = [UIApplication sharedApplication].keyW2. AppDelegate * app =[UIApplication sharedApplication].UIWindow *window = app.3. NSArray *array = [UIApplication sharedApplication].WUIWindow *window = [array objectAtIndex : 0 ]; 部分可用 self.view.window字符串拼接来找图片的图片名& (格式化字符串)NSString* imageName = [NSString stringWithFormat:@"Fire%d.gif",i];根据图片名找图片放到fire的imageView上 &fire.image = [UIImage imageNamed:imageName];让定时器方法不再等待第一个时间差&& [Timer fire];暂时关闭定时器& [timer setFireDate:[NSDate distantFuture]];再开启定时器&& [timer setFireDate:[NSDate distantPast]];永久关闭定时器& [timer invalidate];& timer =输出一个对象的CGRect , CGPoint ,CGSize :NSLog(@"%@",NSStringFromCGRect(CGRect rect));NSLog(@"%@",NSStringFromCGPoint(CGPoint point));NSLog(@"%@",NSStringFromCGSize(CGSize size));//输出字节数&&& NSLog(@"int---%lu",sizeof(int));&&& NSLog(@"long---%lu",sizeof(long));第三周开辟线程的两种方法//开辟分线程的时候,绑定一个方法,让这个方法在分线程里面执行.[NSThread detachNewThreadSelector:@selector(new) toTarget:self withObject:nil];NSThread *thread = [[NSThread alloc]initWithTarget:self selector:@selector(new) object:nil];&&&& 通过alloc 方法开辟线程& 需要去调用start方法 [thread start];解决多个线程同时访问一个数据(类比 多个卖票点同时卖一张火车票),1.NSLock 加线程锁, &//&&& _lock = [[NSLock alloc] init];//&&& [_lock lock];&& &线程队列执行//&&& [_lock unlock];2,线程同步块& @synchronized(self)分线程中不能开启 Timer分线程中不会执行UI的更新,要回到主线程去更新& [self performSelectorOnMainThread:(SEL) withObject:(id) waitUntilDone:(BOOL)];waitUntilDone:&& 为yes 让分线程等待,直接去主线程中执行,执行完毕后继续执行当前的分线程为NO, 分线程执行结束再去执行主线程当前线程休眠& [NSThread sleepForTimeInterval:(NSTimeInterval)];[Thread MainThread];&&&&&& [Thread currentThread];&&& //判断当前线程是否为主线程,返回值为 BOOL类型&&& [NSThread isMainThread];12.31号 :// 获取URL地址上的data 方法 是一个同步的方法&&& NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:@"http://b./image/pic/item/e4dde7af095f9e16fdfaaf516741.jpg"]];//perform 执行, 在主线程中执行一个方法,可以传一个参数给这个方法// 拿到数据之后 回到主线程刷新UI& 分线程不能刷新UI&&& [self performSelectorOnMainThread:@selector(setImageViev:) withObject:data waitUntilDone:YES];3,操作队列://用操作队列可以解决线程同步的问题,如果有多个操作的话,每个操作随机先执行,执行完一个操作之后才去执行另外一个操作,不会出现一个数据同时被多个操作访问的情况.&& &&&& // 创建一个操作 绑定相应的方法,当把操作添加到操作队列中时 操作绑定的方法就会自动执行了&&&& // 创建一个操作队列&&& NSOperationQueue *queue = [[NSOperationQueue alloc] init];&&&& // 1,系统提供的操作&&& // 调用操作&&& NSInvocationOperation *operation1 = [[NSInvocationOperation alloc] initWithTarget:self selector:@selector(doSomeThing) object:nil];&&&& // 把操作添加到操作队列中&&& [queue addOperation:operation1];设置导航栏标题第一种self.title = @"setting"; 第二种self.navigationItem.title = @"1111";第三种&& &UILabel *lab = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 44, 44)];lab.text = @"111222";lab.backgroundColor = [UIColor redColor];self.navigationItem.titleView =设置导航栏右边按钮选项UIBarButtonItem *rightButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:self action:@selector(buttonClick:)];self.navigationItem.rightBarButtonItems = rightButton ;跳转到下一个界面1. SecondViewController *secondVC = [[SecondViewController alloc] init];& [self.navigationController pushViewController:secondVC animated:YES];2.模态弹出&SecondViewController *secondVC = [[SecondViewController alloc] init];[self.navigationController presentViewController:secondVC animated:YES completion:nil];(如果使用模态弹出,此时没有导航栏且ViewController 不会被加载到导航控制器中,那么就不能使用pop方法)&&&&&&&&&&&&&&&&& 若想返回上一个界面,要使用 [self.navigationController dismissViewControllerAnimated:YES completion:nil];&&& //模态弹出的样式( 非全屏 formSheet,pageSheet)&&& vc.modalPresentationStyle = UIModalPresentationFormS&&&&&&& //模态弹出的动画方式&&& vc.modalTransitionStyle = UIModalTransitionStyleFlipH返回到上一个界面[self.navigationController popViewControllerAnimated:YES];返回到根视图界面[self.navigationController popToRootViewControllerAnimated:YES];返回到指定视图界面(获取导航器中的所有导航控制器)&&&& NSArray *array = self.navigationController.viewC[self.navigationController popToViewController:[array objectAtIndex:0] animated:YES];在一个数组中插入数组NSMutableArray *array1 = [NSMutableArray arrayWithObjects: @"one", @"two", @"three", @"four", nil];NSArray *newAdditions = [NSArray arrayWithObjects: @"a", @"b", nil];NSMutableIndexSet *indexes = [NSMutableIndexSet indexSetWithIndex:1];[indexes addIndex:3];//& indexes&& 1& 3[array1 insertObjects:newAdditions atIndexes:indexes];NSLog(@"array: %@", array)// Output: array: (one, a, two, b, three, four)&替换多个索引值的对象(NSIndexSet *) 索引[arr replaceObjectsAtIndexes:(NSIndexSet *) withObjects:(NSArray *)];从第二界面回到第一界面时 此时viewdidload方法不再执行,因为视图已经加载过了此时需要重写viewWillAppear(视图将要显示)- (void)viewWillAppear:(BOOL)animated{&&& [super viewWillAppear:animated];&&&& NSLog(@"从第二个页面得到的内容& %@",self.fromSecondText);//&&& 把第二界面的内容赋值给text1&&& text1.text = self.fromSecondT}判断从数组中取的对象是否是( )类型的对象用 iskindOfClassScrollView.contentSize (容量大小)设置水平竖直方向的标示符scrollView.showsHorizontalScrollIndicator = YES;scrollView.showsVerticalScrollIndicator = YES;设置是否可以分页scrollView.pagingEnabled = YES;设置是否回弹scrollView.bounces = YES;设置偏移量& (向左为正& 向右为负)scrollView.contentOffset = CGPointMake(30, 0);设置拖动过程中水平或者垂直方向能否被锁定scrollView.directionalLockEnabled = YES;设置 scrollView 四个边界的预留空白区域scrollView.contentInset = UIEdgeInsetsMake(40, 40, 0, 0);ScrollView中实现图片的缩放设置它的最大放大比例(长和宽)& _scrollView.maximumZoomScale = 4;& _scrollView.minimumZoomScale = 0.25;&返回需要缩放的 View,这个 View 必须是 scrollview 的子 View,实现了这个方法,scrollview 就可以实现缩放了。& 如果使用了 scrollView 的缩放功能,就不能再用它的滑动效果,否则会乱。- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{&&& return _imageV}当 scrollView 已经缩放时的回调- (void)scrollViewDidZoom:(UIScrollView *)scrollView{& //_imageView.center = self.view.(缩小的时候可以用)&&& if (scrollView.zoomScale&1)&&& {&&&&&&& float width = _scrollView.frame.size.width*(1-scrollView.zoomScale)/2;&&&&&&& float height = _scrollView.frame.size.height*(1-scrollView.zoomScale)/2;&&&&&&& scrollView.contentInset = UIEdgeInsetsMake(height, width, 0, 0);&&& }}PageControl.numberOfPages& 设置页数(几个点)PageControl.currentPage& 当前的页数系统 tabBar的选项&pay.tabBarItem = [[UITabBarItem alloc]initWithTabBarSystemItem:UITabBarSystemItemRecents tag:1];若要给它换图片,用pay.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"pay" image:[UIImage imageNamed:@"1"] selectedImage:[UIImage imageNamed:@"1"]];给tabBar 设置多个视图控制器NSArray *vcArray = @[nav1,nav2,nav3,nav4,five,six];tabBarController.viewControllers = vcA设置当前选中的索引tabBarController.selectedIndex = 0;&1.创建多个视图控制器&2.创建UITabBarController的实例&3.把UITabBarController的对象做为根视图添加到window上&4.将所有的视图控制器添加到tabbar上&5.设置tabbar中的item设置样式toolBar.barStyle = UIBarStyleDUIBarButtonItem *barButton1 = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemSave target:self action:Nil];设置BarButtonItem 之间的固定空间UIBarButtonItem *FixedSpace = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFixedSpace target:self action:Nil];宽度& FixedSpace.width& = 20; &NSArray *itemArray = @[FixedSpace,barButton2,FixedSpace,barButton3];[toolBar setItems:itemArray animated:YES];ActionSheet 中的按钮是从上到下来按顺序设置索引值的AlertView 中的按钮中&取消&的索引值是0,其他的按顺序设置若要使用系统的代理方法,要在.h 文件声明类的后面加上&UI XXX Delegate&第四周代理如果一个页面以及上面的内容会在不同的时候出现,此时可以把这个相同的东西封装到一个类当中, 若此页面出现的时候需要调用一些方法,此时为了区分它们,我们可以在封装类的头文件中声明一个 id 类型的对象(delegate),并在@end 下面用@protocol声明此对象的方法(此方法的实现内容在具体出现的页面中实现),让其在需要用的时候调用。@end@protocol XXXDelgate &NSObject&@optional- (void)myView:(UIView *)myView clickedButtonAtIndex:(NSInteger)buttonI@end继承于 UIView的类所创造的对象可以打点调用 hidden 设置为 YES 让其隐藏。 数据源&& pickerView.dataSource =&& 有两个必须实现的方法代理&& pickerView.delegate =[pickerView selectedRowInComponent:0]; 获得第0区的第Row行刷新第一个区& [pickerView reloadComponent:1];选中第1区的第0行[pickerView selectRow:0 inComponent:1 animated:YES];#pragma mark& 杂注设置样式datePicker.datePickerMode = UIDatePickerModeDateAndT获取picker的时间NSDate *date = picker.创建时间格式化器NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];&设置date的格式[dateFormatter setDateFormat:@"yyyy-MMMM-dd-EEE-aa"];把时间转换成字符串NSString *dateString = [dateFormatter stringFromDate:date];yy: 年的后2位&& yyyy: 完整年 &MM: 月,显示为1-12& MMM: 月,显示为英文月份简写,如Jan& MMMM: 月,显示为英文月份全称,如Janualydd: 日,2位数表示,如02& d: 日,1-2位显示,如 2EEE: 简写星期几,如Sun& EEEE: 全写星期几,如Sundayaa: 上下午,AM/PMH: 时,24小时制,0-23K:时,12小时制,0-11m: 分,1-2位& mm: 分,2位s: 秒,1-2位& ss: 秒,2位& S: 毫秒Z:& 时区常用日期结构:yyyy-MM-dd HH:mm:ss.SSSyyyy-MM-dd HH:mm:ssyyyy-MM-ddMM dd yyyy&& &第五周获取标题宽度width = button.titleLabel.frame.size.UIFont *font = [UIFont systemFontOfSize:17];CGSize size = [@"百度" sizeWithFont:font];webView& 网页视图_webView = [[UIWebView alloc] initWithFrame:CGRectMake(0, 0, 320, 480)];[self.view addSubview:_webView];& &//&&& 创建 链接NSURL *url = [[NSURL alloc] initWithString:@""];//& 创建请求NSURLRequest *request = [[NSURLRequest alloc] initWithURL:url];//&&& 加载请求[_webView loadRequest:request];不能深度赋值应该这样:CGRect rect = rainImage.&&&&&&& rect.origin.y = 305;&&&&&&& rainImage.frame =如果把 Image 盖在 button 上面,在 image 上点击 button 效果还会被触发,如果是把 View 盖在上面,button 效果不会被触发。UITableView设置分割线的颜色 tableView.separatorColor实现表的数据源方法下面黄色部分可以相互代替(写在 tableView 的创建后面)给 tableview 的 ReuseIdentifier 注册一个 cell类,当 tableview 找不到可以重用的 cell 时,就会自动创建一个这种类型的 cell[_table registerClass:[UITableViewCell class]& forCellReuseIdentifier:@"cell"];- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{&&& static NSString *cellIdentifier = @"cell";&&& //&&& 在队列中查询有没有可以重用的单元格&&& UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];&&& //&&& 如果没有单元格 就去创建新的单元格&&& if (!cell)&&& {&&&&&&& cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];&&& }&&&}如果是自定义表加载 xib 时,要用if (!cell)&&& {&& &&& &//手动加载xib文件&&&&&&& NSArray *array = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:Nil options:Nil];&&& &&& &//强转&&&&&&& cell = (CustomCell *)[array objectAtIndex:0];&&& }自定义区头后一定要记得设置区头和区尾的高度// 设置索引标题- (NSArray *)sectionIndexTitlesForTableView:(UITableView *)tableView{&&& return _}// 完成编辑- (void)tableView:(UITableView *)tableView commitEditingStyle:(UITableViewCellEditingStyle)editingStyle forRowAtIndexPath:(NSIndexPath *)indexPath{&& &(此方法写上以后向右划定单元格会出现删除按钮,移除单元格的方法也就写在这个方法里面)}//设置是否可以移动- (BOOL)tableView:(UITableView *)tableView canMoveRowAtIndexPath:(NSIndexPath *)indexPath{&&& return YES;}//改变数据- (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath{&& &找到sourceIndexPath所在的位置(区、行)并把它从当前的数组中移除,然后把&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& sourceIndexPath加入到destinationIndexPath所在的位置(区、行),完成操作后一定要刷新表}刷新表的两种方法:1.[_tableView reloadData];2.& NSIndexSet& 索引集合 把将要改变的区加入到索引集合中& NSMutableIndexSet& 可变的索引集合&NSMutableIndexSet *indexSet = [NSMutableIndexSet indexSetWithIndex:section];[_tableView reloadSections:indexSet withRowAnimation:UITableViewRowAnimationFade];第二种方法比较高效刷新表的时候,表的数据源方法和代理方法都要重新执行一次Rotation 旋转顺时针旋转90Button.transform = CGAffineTransformMakeRotation(M_PI_2);transform默认为CGAffineTransformIdentity//&&& 获取最后一行的索引&&& NSIndexPath *indexPath = [NSIndexPath indexPathForRow:_messageArray.count - 1 inSection:0];//&&& _tableView滑动&&& [_tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:YES];//&&& 自适应高度&&& CGRect rect = [contentText boundingRectWithSize:CGSizeMake(160, MAXFLOAT) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName: [UIFont systemFontOfSize:17]} context:Nil];UIImage *old = _whoSay ?[UIImage imageNamed:@"bubbleSelf"]:[UIImage imageNamed:@"bubble"];UIImage *image = [old stretchableImageWithLeftCapWidth:10 topCapHeight:10];imageView.image =第六周NSNumber 能够把基本类型的数据包装成一个对象,此对象可以存进数组。&&& _sectionOpenArray = [[NSMutableArray alloc]initWithObjects:[NSNumber numberWithBool:NO], [NSNumber numberWithBool:NO],[NSNumber numberWithBool:NO],nil];利用 NSNumber 实现 BOOL 值的转换来改变tableView 中区的打开与关闭[_sectionOpenArray replaceObjectAtIndex:button.tag withObject:[NSNumber numberWithBool:![[_sectionOpenArray objectAtIndex:button.tag] boolValue]]];设置 alert 的样式,不同样式上面的 textfield 数量和类型不同&&& alert.alertViewStyle = UIAlertViewStylePlainTextI&&& [alert textFieldAtIndex:0].placeholder = @"用户名";用 alert 在 tableView 中添加一个分组if (alertView.tag == 100)&& {&&&&& //首先在好友数组中添加一个新的数组,用来存放这个区的好友&&&&& [_friendArray addObject:[NSMutableArray arrayWithCapacity:0]];&&&&& //然后再分组名称数组中添加这个新分组的名字&&&&& NSString *name = [alertView textFieldAtIndex:0].&&&&& [_sectionNameArray addObject:name];&&&&& //最后在控制打开关闭的数组中给这个新区添加一个 NSnumber,用来标记它的打开状态&&&&& [_sectionOpenArray addObject:[NSNumber numberWithBool:NO]];&&&&& [_table reloadData];&& }//从 iOS7 开始,状态栏和 navigationBar 与 viewController 合为一体(ViewController 的 View 左上角从屏幕左上角开始),为了保证 tableview 或者 scrollView 顶部的内容不被 navigationBar 挡住,ViewController回自动给自身上的 scrollerView 顶部添加64的 inset,如果不需要这个 inset,automaticallyAdjustsScrollViewInsets设置为 NO 即可。&&& self.automaticallyAdjustsScrollViewInsets = NO;&&& _table.contentInset = UIEdgeInsetsMake(64, 0, 0, 0);&&& //刷新控制器&&& UIRefreshControl *control = [[UIRefreshControl alloc] init];&&& //设置菊花颜色&&& control.tintColor = [UIColor redColor];&&& //设置下拉刷新标题&&& NSMutableAttributedString *str = [[NSMutableAttributedString alloc] initWithString:@"下拉刷新"];&&& [str setAttributes:[NSDictionary dictionaryWithObjectsAndKeys:[UIFont systemFontOfSize:20],NSFontAttributeName,[UIColor redColor],NSForegroundColorAttributeName, nil] range:NSMakeRange(0, 4)];&&& control.attributedTitle =&&& //把刷新控制器和tableViewController结合&&& self.refreshControl =&& &//停止下拉刷新的转动动画&&& [self.refreshControl endRefreshing];为什么要管理内存?计算机的内存是有限的,如果我们需要使用一个对象,会在内存中创建这个对象,内存使用量就会越来越多,如果只创建,不去释放,那么就会造成内存撑爆。所以,我们在使用一个对象时创建,不再使用这个对象时,要把它释放。不同语言管理内存的方式Java:全自动内存管理:Java 运行时,每隔一段时间就会自动检查内存当中的所有对象,当发现不再使用的对象时,就会把这个对象从内存中释放。这个功能叫做 Java 垃圾回收机制。这种内存管理机制使用方便,但是运行效率低。C++:全手动内存管理:当需要使用一个对象时创建,确定不再使用这个对象时,手动把它释放掉。这种内存管理机制使用麻烦,但是运行效率高。OC:通过引用计数来管理内存(半自动管理内存):对象的引用计数就是标记当前有多少个其他对象正在使用这个对象。当其他对象需要使用这个对象时,要把这个对象的引用计数加1,当某个其他对象不再使用这个对象时,要把这个对象引用计数减1。一旦某个对象的引用计数为0,那么它就会被系统释放掉。*全局指针需要在dealloc中release。 *局部指针需要在方法结束前releasesuper dealloc目的是释放掉父类的全局指针指

我要回帖

更多关于 timertask run 的文章

 

随机推荐