您的位置:首页 > 移动开发 > IOS开发

iOS开发小技巧(一)

2015-10-31 23:17 459 查看
// 取消所有请求

1.[NSObject cancelPreviousPerformRequestsWithTarget:selfselector:@selector(sendContentReqData)object:nil];

// 刷新tableView某一行

2.[m_tableView reloadRowsAtIndexPaths:[NSArrayarrayWithObject:[NSIndexPathindexPathForRow:m_selectRowinSection:0]]withRowAnimation:UITableViewRowAnimationRight];

// 删除cell上所有view

3.[cell.contentView.subviewsmakeObjectsPerformSelector:@selector(removeFromSuperview)];

4. //屏蔽UIAlert系统的ImageView 和 UIButton

for (UIView *v in [self subviews]) {

if ([v class] == [UIImageView class]){

[v setHidden:YES];

}

if ([v isKindOfClass:[UIButton class]] ||

[v isKindOfClass:NSClassFromString(@"UIThreePartButton")]) {

[v setHidden:YES];

}

}

5. textField 文字上下居中

textField.contentVerticalAlignment =UIControlContentVerticalAlignmentCenter;

全部删除按钮

textField.clearButtonMode =UITextFieldViewModeWhileEditing;

[textFieldsetAutocapitalizationType:UITextAutocapitalizationTypeNone];

6.模拟导航条颜色

UINavigationBar *tmpNavBar=[[UINavigationBar alloc]initWithFrame:CGRectMake(0, 0, screenRect.size.width, 44)];

tmpNavBar.barStyle=UIBarStyleDefault;

self.m_navigationBar=tmpNavBar;

UINavigationItem *tmpNavItem=[[UINavigationItemalloc]initWithTitle:@"Search"];

UIBarButtonItem *tmpBarItem=[[UIBarButtonItem alloc]initWithTitle:@"Done"style:UIBarButtonItemStyleDone target:selfaction:@selector(exitSearchScreen)];

[tmpNavItem setRightBarButtonItem:tmpBarItem];

[m_navigationBar setItems:[NSArray arrayWithObject:tmpNavItem]];

[self addSubview:m_navigationBar];

7.

for (UIView *subview inm_searchBar.subviews) {

if([subviewisKindOfClass:NSClassFromString(@"UISearchBarBackground")]){

[subview removeFromSuperview];

}

}

UITextField *searchField = [[m_searchBarsubviews] lastObject];

searchField.font = [UIFontfontWithName:@"DINNextRoundedLTPro-Regular"size:16];

总结

1.数组、字典内容不能为空,装的是地址,为空就是野指针

2.数组,字典访问不能越界

3.代理最好在dealloc里设置为nil,单利必须设置,因为一个类释放了,但是单利指针还指向这个类,可能会出问题。

4.防止野指针,代理处崩溃多为此现象。

5.字符串判断不为空,一般 str!= nil && ![str isEqualTo@""] , 不等于nil是有地址,后者是内容不为空。

6.下面的view或self.view如果小于上面的,上面的view超过下面的部分将无法与用户交互。

7.自定义cell时,最好在cell.contentView上加控件

8.尽量使用点语法,减少内存泄漏

9.代理调用方式

可选

if (m_searchdelegate &&[m_searchdelegaterespondsToSelector:@selector(filtrate:)]) {

[m_searchdelegate filtrate:m_genreSelect];

}

必选

if (m_searchdelegate) {

[m_searchdelegate filtrate:m_genreSelect];

}

10.不能重复释放

11.两个对象不能相互引用

12.dealloc的super dealloc必须放在最后面

13.所有不带星号的和id类型的都只能assign

14.系统线程也有副线程

15.一些变量最好都初始化,且写在一个方法里,需要恢复开始的状态时可以直接调用该方法恢复

16.初始化的指针都要赋值为nil,系统不会帮你这么做的

16.block 对象语法

1.在内联Block Objects可以直接读取对象self,独立的BlockObjects若想读取self对象必须将其设置为参数传递进去。

2.在内联Block Objects可以直接用点语法读取对象self的属性,也可以使用setter和 getter方法,但是,独立的Block Objects只能用setter and getter方法读取对象self的属性

17.改变导航条颜色

[nav.navigationBar setTintColor:[UIColorgrayColor]];

nav.navigationBar.barStyle =UIBarStyleBlackTranslucent;

18.程序崩溃处理方法

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

{

NSSetUncaughtExceptionHandler(&UncaughtExceptionHandler);

}

调用下面的方法,如数组越界,调用不存在的方法等会打出详细的信息。

void UncaughtExceptionHandler(NSException*exception) {

NSArray *arr = [exception callStackSymbols];

NSString *reason = [exception reason];

NSString *name = [exception name];

NSLog(@"\nname: %@\reason: %@\nuserInfo: %@\ncallStackSymbols:%@\ncallStackReturnAddresses: %@",name,reason,[exceptionuserInfo],arr,[exceptioncallStackReturnAddresses]);

}

开启僵尸模式 Object-C的Enable Zombie Objects勾选,Memory 中的MallocStack勾选,Exceptions里的Log Exceptions勾选
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: