ios 基础知识点总结

释放双眼,带上耳机,听听看~!
1、ios禁止手机睡眠

[UIApplicationsharedApplication].idleTimerDisabled = YES;

2、ios隐藏某行cell

- (CGFloat) tableView: (UITableView) tableViewheightForRowAtIndexPath: (NSIndexPath) indexPath

{

	//如果是你需要隐藏的那一行,返回高度为0
	  
	if (indexPath.row == YouWantToHideRow)

	    return0; 

	  return44;

}

//然后再你需要隐藏cell的时候调用
[self.tableViewbeginUpdates];

[self.tableViewendUpdates];

3、ios禁用button高亮

button.adjustsImageWhenHighlighted = NO;

或者在创建的时候

 UIButtonbutton = [UIButtonbuttonWithType: UIButtonTypeCustom];

4、iostableview遇到这种报错failedtoobtainacellfromitsdataSource

是因为你的cell被调用的早了。先循环使用了cell,后又创建cell。顺序错了。可能原因:

xib的cell没有注册 

内存中已经有这个cell的缓存了 (也就是说通过你的cellId找到的cell并不是你想要的类型),这时候需要改下cell的标识

5、ioscocoapods报这个错误:unabletoaccess‘https: //github.com/facebook/pop.git/‘:Operationtimedoutafter0millisecondswith0outof0bytesreceived
解决办法:原因可能是网络问题,网络请求超时了,只需要重试就行了

6、ioscocoapods出现ERROR: Whileexecutinggem… (Errno: :EPERM)

解决办法:

https: //segmentfault.com/q/1010000002926243
7、ios动画切换window的根控制器

//options是动画选项
[UIViewtransitionWithView: [UIApplicationsharedApplication].keyWindowduration: 0.5foptions: UIViewAnimationOptionTransitionCrossDissolveanimations: ^{

	    BOOLoldState = [UIViewareAnimationsEnabled];

	     [UIViewsetAnimationsEnabled: NO];

	     [UIApplicationsharedApplication].keyWindow.rootViewController = [RootViewControllernew];

	     [UIViewsetAnimationsEnabled: oldState];

	  
}
completion: ^(BOOLfinished) {

	  
}];

8、ios去除数组中重复的对象

NSArray * newArr = [oldArrvalueForKeyPath: @“@distinctUnionOfObjects.self”];

9、ios编译的时候遇到nosuchfileordirectory: /users/apple/XXX

是因为编译的时候,在此路径下找不到这个文件,解决这个问题,首先是是要检查缺少的文件是不是在工程中,如果不在工程中,需要从本地拖进去,如果发现已经存在工程中了,或者拖进去还是报错,这时候需要去buildphases中搜索这个文件,这时候很可能会搜出现两个相同的文件,这时候,有一个路径是正确的,删除另外一个即可。如果删除了还是不行,需要把两个都删掉,然后重新往工程里拖进这个文件即可

10、iOS8系统中,tableView最好实现下 - tableView: heightForRowAtIndexPath: 这个代理方法,要不然在iOS8中可能就会出现显示不全或者无法响应事件的问题

11、iOS8中实现侧滑功能的时候这个方法必须实现,要不然在iOS8中无法侧滑

//必须写的方法,和editActionsForRowAtIndexPath配对使用,里面什么不写也行
- (void) tableView: (UITableView) tableViewcommitEditingStyle: (UITableViewCellEditingStyle) editingStyleforRowAtIndexPath: (NSIndexPath) indexPath {

}

12、ios三个通知

NSSystemTimeZoneDidChangeNotification监听修改时间界面的两个按钮状态变化

UIApplicationSignificantTimeChangeNotification监听用户改变时间(只要点击自动设置按钮就会调用)NSSystemClockDidChangeNotification监听用户修改时间(时间不同才会调用)

13、iosSDWebImage本地缓存有时候会害人。如果之前缓存过一张图片,即使下次服务器换了这张图片,但是图片url没换,用sdwebimage下载下来的还是以前那张,
所以遇到这种问题,不要先去怼服务器,清空下缓存再试就好了。

14、ios上线前注意:

1)、删掉代码中所有的测试代码

2)、如果后台有审核模式,提醒后台开启此模式

3)、主流程再跑一跑

4)、全局搜索waring,检查所有标记waring的地方

15、ios跳进app权限设置

//跳进app设置
      
if (UIApplicationOpenSettingsURLString != NULL) {

	        NSURL * url = [NSURLURLWithString: UIApplicationOpenSettingsURLString];

	         [[UIApplicationsharedApplication] openURL: url];

	      
}

    
}

16、ios给一个view截图

UIGraphicsBeginImageContextWithOptions(view.bounds.size, YES, 0.0);

   [view.layerrenderInContext: UIGraphicsGetCurrentContext()];

  UIImage * img = UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

17、ios开发中如果要动态修改tableView的tableHeaderView或者tableFooterView的高度,需要给tableView重新设置,而不是直接更改高度。正确的做法是重新设置一下tableView.tableFooterView = 更改过高度的view。为什么?其实在iOS8以上直接改高度是没有问题的,在iOS8中出现了contentSize不准确的问题,这是解决办法。

18、ios注意对象为nil的时候,调用此对象分类的方法不会执行。

19、ioscollectionView的内容小于其宽高的时候是不能滚动的,设置可以滚动:

collectionView.alwaysBounceHorizontal = YES;

collectionView.alwaysBounceVertical = YES;

20、ios设置navigationBar上的title颜色和大小

[self.navigationController.navigationBarsetTitleTextAttributes: @ {
	NSForegroundColorAttributeName: [UIColoryouColor],
	NSFontAttributeName: [UIFontsystemFontOfSize: 15]
}]

21、ios颜色转图片

+ (UIImage) cl_imageWithColor: (UIColor) color {

	 CGRectrect = CGRectMake(0.0f, 0.0f, 1.0f, 1.0f);

	 UIGraphicsBeginImageContext(rect.size);

	 CGContextRefcontext = UIGraphicsGetCurrentContext();

	 CGContextSetFillColorWithColor(context, [colorCGColor]);

	 CGContextFillRect(context, rect);

	 UIImage * image = UIGraphicsGetImageFromCurrentImageContext();

	 UIGraphicsEndImageContext();

	 returnimage;

}

22、iosview设置圆角

#defineViewBorderRadius(View, Radius, Width, Color)

[View.layersetCornerRadius: (Radius)];

[View.layersetMasksToBounds: YES];

[View.layersetBorderWidth: (Width)];

[View.layersetBorderColor: [ColorCGColor]] //view圆角
23、ios强/弱引用

#defineWeakSelf(type) weaktypeof(type) weak##type = type; //weak
#defineStrongSelf(type) __strongtypeof(type) type = weak##type; //strong
24、ios由角度转换弧度

#defineDegreesToRadian(x)(M_PI(x) / 180.0)

25、由弧度转换角度

#defineRadianToDegrees(radian)(radian * 180.0) / (M_PI)

26、ios获取图片资源

#defineGetImage(imageName)[UIImageimageNamed: [NSStringstringWithFormat: @” % @”, imageName]]

27、ios获取temp

#definePathTempNSTemporaryDirectory()

28、ios获取沙盒Document

#definePathDocument[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject]

29、ios获取沙盒Cache

#definePathCache[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject]

30、iosGCD代码只执行一次

#definekDISPATCH_ONCE_BLOCK(onceBlock) staticdispatch_once_tonceToken;
dispatch_once( & onceToken, onceBlock);

31、ios自定义NSLog

#ifdefDEBUG

#defineNSLog(fmt, …) NSLog((@” % s[Line % d]”fmt), __PRETTY_FUNCTION, LINE, ##VA_ARGS)

#
else

#defineNSLog(…)

#endif

32、iosFont

#defineFontL(s)       [UIFontsystemFontOfSize: sweight: UIFontWeightLight]

#defineFontR(s)       [UIFontsystemFontOfSize: sweight: UIFontWeightRegular]

#defineFontB(s)       [UIFontsystemFontOfSize: sweight: UIFontWeightBold]

#defineFontT(s)       [UIFontsystemFontOfSize: sweight: UIFontWeightThin]

#defineFont(s)       FontL(s)

33、iosFORMAT

#defineFORMAT(f, …)    [NSStringstringWithFormat: f, ##VA_ARGS]

34、ios在主线程上运行

#definekDISPATCH_MAIN_THREAD(mainQueueBlock) dispatch_async(dispatch_get_main_queue(), mainQueueBlock);

35、ios开启异步线程

#definekDISPATCH_GLOBAL_QUEUE_DEFAULT(globalQueueBlock) dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), globalQueueBlocl);

36、ios通知

#defineNOTIF_ADD(n, f)   [[NSNotificationCenterdefaultCenter] addObserver: selfselector: @selector(f) name: nobject: nil]

#defineNOTIF_POST(n, o)   [[NSNotificationCenterdefaultCenter] postNotificationName: nobject: o]

#defineNOTIF_REMV()     [[NSNotificationCenterdefaultCenter] removeObserver: self]

37、ios随机颜色

+ (UIColor) RandomColor {

	  NSIntegeraRedValue = arc4random() % 255;

	  NSIntegeraGreenValue = arc4random() % 255;

	  NSIntegeraBlueValue = arc4random() % 255;

	  UIColor * randColor = [UIColorcolorWithRed: aRedValue / 255.0fgreen: aGreenValue / 255.0fblue: aBlueValue / 255.0falpha: 1.0f];

	  returnrandColor;

}

38、ios获取window

+ (UIWindow) getWindow {

	  UIWindow * win = nil; //[UIApplicationsharedApplication].keyWindow;
	  
	for (iditemin[UIApplicationsharedApplication].windows) {

		    
		if ([itemclass] == [UIWindowclass]) {

			      
			if (! ((UIWindow * ) item).hidden) {

				        win = item;

				        
				break;

				      
			}

			    
		}

		  
	}

	  returnwin;

}

39、ios修改textField的placeholder的字体颜色、大小

[textFieldsetValue: [UIColorredColor] forKeyPath: @”_placeholderLabel.textColor”];

[textFieldsetValue: [UIFontboldSystemFontOfSize: 16] forKeyPath: @”_placeholderLabel.font”];

40、ios统一收起键盘

[[[UIApplicationsharedApplication] keyWindow] endEditing: YES];

41、ios控制屏幕旋转,在控制器中写

/*是否支持自动转屏/

-(BOOL)shouldAutorotate{

  returnYES;

}




/*支持哪些屏幕方向/

-(UIInterfaceOrientationMask)supportedInterfaceOrientations{

  returnUIInterfaceOrientationMaskLandscapeLeft|UIInterfaceOrientationMaskLandscapeRight;

}




/*默认的屏幕方向(当前ViewController必须是通过模态出来的UIViewController(模态带导航的无效)方式展现出来的,才会调用这个方法)/

-(UIInterfaceOrientation)preferredInterfaceOrientationForPresentation{

  returnUIInterfaceOrientationLandscapeLeft|UIInterfaceOrientationLandscapeRight;

}




42、ios获取app缓存大小




-(CGFloat)getCachSize{




  NSUIntegerimageCacheSize=[[SDImageCachesharedImageCache]getSize];

  //获取自定义缓存大小

  //用枚举器遍历一个文件夹的内容

  //1.获取文件夹枚举器

  NSStringmyCachePath=[NSHomeDirectory()stringByAppendingPathComponent:@”Library/Caches”];

  NSDirectoryEnumerator*enumerator=[[NSFileManagerdefaultManager]enumeratorAtPath:myCachePath];

  __blockNSUIntegercount=0;

  //2.遍历

  for(NSString*fileNameinenumerator){

    NSString*path=[myCachePathstringByAppendingPathComponent:fileName];

    NSDictionary*fileDict=[[NSFileManagerdefaultManager]attributesOfItemAtPath:patherror:nil];

    count+=fileDict.fileSize;//自定义所有缓存大小

  }

  //得到是字节 转化为M

  CGFloattotalSize=((CGFloat)imageCacheSize+count)/1024/1024;

  returntotalSize;

}




43、ios清理app缓存




-(void)handleClearView{

  //删除两部分

  //1.删除sd图片缓存

  //先清除内存中的图片缓存

  [[SDImageCachesharedImageCache]clearMemory];

  //清除磁盘的缓存

  [[SDImageCachesharedImageCache]clearDisk];

  //2.删除自己缓存

  NSString*myCachePath=[NSHomeDirectory()stringByAppendingPathComponent:@”Library/Caches”];

  [[NSFileManagerdefaultManager]removeItemAtPath:myCachePatherror:nil];

}




44、ios模型转字典




staticNSSet*classes;




-(NSMutableDictionary)getParameterDictionary{




  NSMutableDictionarydict=[NSMutableDictionarydictionary];




  Classc=self.class;




  while(c){

    unsignedcount;

    objc_property_t*properties=class_copyPropertyList([cclass],&count);




    for(inti=0;i<count;i++){

      NSString*key=[NSStringstringWithUTF8String:property_getName(properties[i])];

      dict[key]=[selfvalueForKey:key];

    }

    free(properties);




    //获得父类

    c=class_getSuperclass(c);




    if([selfisClassFromFoundation:c])break;

  }

  returndict;

}




-(BOOL)isClassFromFoundation:(Class)c

{

  if(c==[NSObjectclass]||c==[NSManagedObjectclass])returnYES;




  __blockBOOLresult=NO;

  [[selffoundationClasses]enumerateObjectsUsingBlock:^(ClassfoundationClass,BOOL*stop){

    if([cisSubclassOfClass:foundationClass]){

      result=YES;

      *stop=YES;

    }

  }];

  returnresult;

}




-(NSSet)foundationClasses

{

  if(classes==nil){

    //集合中没有NSObject,因为几乎所有的类都是继承自NSObject,具体是不是NSObject需要特殊判断

    classes=[NSSetsetWithObjects:

               [NSURLclass],

               [NSDateclass],

               [NSValueclass],

               [NSDataclass],

               [NSErrorclass],

               [NSArrayclass],

               [NSDictionaryclass],

               [NSStringclass],

               [NSAttributedStringclass],nil];

  }

  returnclasses;

}




45、ios交换两个方法实现




ClassaClass=[selfclass]; 




    SELoriginalSelector=@selector(viewWillAppear:); 

    SELswizzledSelector=@selector(xxx_viewWillAppear:); 




    MethodoriginalMethod=class_getInstanceMethod(aClass,originalSelector); 

    MethodswizzledMethod=class_getInstanceMethod(aClass,swizzledSelector); 




    BOOLdidAddMethod= 

      class_addMethod(aClass, 

        originalSelector, 

        method_getImplementation(swizzledMethod), 

        method_getTypeEncoding(swizzledMethod)); 




    if(didAddMethod){ 

      class_replaceMethod(aClass, 

        swizzledSelector, 

        method_getImplementation(originalMethod), 

        method_getTypeEncoding(originalMethod)); 

    }else{ 

      method_exchangeImplementations(originalMethod,swizzledMethod); 

    }




46、ios打印百分号和引号




  NSLog(@”%%”);

  NSLog(@””“);




47、ios几个常用权限判断




  if([CLLocationManagerauthorizationStatus]==kCLAuthorizationStatusDenied){

    NSLog(@”没有定位权限”);

  }

  AVAuthorizationStatusstatusVideo=[AVCaptureDeviceauthorizationStatusForMediaType:AVMediaTypeVideo];

  if(statusVideo==AVAuthorizationStatusDenied){

    NSLog(@”没有摄像头权限”);

  }

  //是否有麦克风权限

  AVAuthorizationStatusstatusAudio=[AVCaptureDeviceauthorizationStatusForMediaType:AVMediaTypeAudio];

  if(statusAudio==AVAuthorizationStatusDenied){

    NSLog(@”没有录音权限”);

  }

  [PHPhotoLibraryrequestAuthorization:^(PHAuthorizationStatusstatus){

    if(status==PHAuthorizationStatusDenied){

      NSLog(@”没有相册权限”);

    }

  }];




48、ios获取手机型号




  +(NSString)getDeviceInfo{

  structutsnamesystemInfo;

  uname(&systemInfo);

  NSString*platform=[NSStringstringWithCString:systemInfo.machineencoding:NSASCIIStringEncoding];

  if([platformisEqualToString:@”iPhone1,1”])return@”iPhone2G”;

  if([platformisEqualToString:@”iPhone1,2”])return@”iPhone3G”;

  if([platformisEqualToString:@”iPhone2,1”])return@”iPhone3GS”;

  if([platformisEqualToString:@”iPhone3,1”])return@”iPhone4”;

  if([platformisEqualToString:@”iPhone3,2”])return@”iPhone4”;

  if([platformisEqualToString:@”iPhone3,3”])return@”iPhone4”;

  if([platformisEqualToString:@”iPhone4,1”])return@”iPhone4S”;

  if([platformisEqualToString:@”iPhone5,1”])return@”iPhone5”;

  if([platformisEqualToString:@”iPhone5,2”])return@”iPhone5”;

  if([platformisEqualToString:@”iPhone5,3”])return@”iPhone5c”;

  if([platformisEqualToString:@”iPhone5,4”])return@”iPhone5c”;

  if([platformisEqualToString:@”iPhone6,1”])return@”iPhone5s”;

  if([platformisEqualToString:@”iPhone6,2”])return@”iPhone5s”;

  if([platformisEqualToString:@”iPhone7,1”])return@”iPhone6Plus”;

  if([platformisEqualToString:@”iPhone7,2”])return@”iPhone6”;

  if([platformisEqualToString:@”iPhone8,1”])return@”iPhone6s”;

  if([platformisEqualToString:@”iPhone8,2”])return@”iPhone6sPlus”;

  //日行两款手机型号均为日本独占,可能使用索尼FeliCa支付方案而不是苹果支付

  if([platformisEqualToString:@”iPhone9,1”])  return@”国行、日版、港行iPhone7”;

  if([platformisEqualToString:@”iPhone9,2”])  return@”港行、国行iPhone7Plus”;

  if([platformisEqualToString:@”iPhone9,3”])  return@”美版、台版iPhone7”;

  if([platformisEqualToString:@”iPhone9,4”])  return@”美版、台版iPhone7Plus”;

  if([platformisEqualToString:@”iPhone8,4”])return@”iPhoneSE”;

  if([platformisEqualToString:@”iPod1,1”])return@”iPodTouch1G”;

  if([platformisEqualToString:@”iPod2,1”])return@”iPodTouch2G”;

  if([platformisEqualToString:@”iPod3,1”])return@”iPodTouch3G”;

  if([platformisEqualToString:@”iPod4,1”])return@”iPodTouch4G”;

  if([platformisEqualToString:@”iPod5,1”])return@”iPodTouch5G”;

  if([platformisEqualToString:@”iPad1,1”])return@”iPad1G”;

  if([platformisEqualToString:@”iPad2,1”])return@”iPad2”;

  if([platformisEqualToString:@”iPad2,2”])return@”iPad2”;

  if([platformisEqualToString:@”iPad2,3”])return@”iPad2”;

  if([platformisEqualToString:@”iPad2,4”])return@”iPad2”;

  if([platformisEqualToString:@”iPad2,5”])return@”iPadMini1G”;

  if([platformisEqualToString:@”iPad2,6”])return@”iPadMini1G”;

  if([platformisEqualToString:@”iPad2,7”])return@”iPadMini1G”;

  if([platformisEqualToString:@”iPad3,1”])return@”iPad3”;

  if([platformisEqualToString:@”iPad3,2”])return@”iPad3”;

  if([platformisEqualToString:@”iPad3,3”])return@”iPad3”;

  if([platformisEqualToString:@”iPad3,4”])return@”iPad4”;

  if([platformisEqualToString:@”iPad3,5”])return@”iPad4”;

  if([platformisEqualToString:@”iPad3,6”])return@”iPad4”;

  if([platformisEqualToString:@”iPad4,1”])return@”iPadAir”;

  if([platformisEqualToString:@”iPad4,2”])return@”iPadAir”;

  if([platformisEqualToString:@”iPad4,3”])return@”iPadAir”;

  if([platformisEqualToString:@”iPad4,4”])return@”iPadMini2G”;

  if([platformisEqualToString:@”iPad4,5”])return@”iPadMini2G”;

  if([platformisEqualToString:@”iPad4,6”])return@”iPadMini2G”;

  if([platformisEqualToString:@”i386”])return@”iPhoneSimulator”;

  if([platformisEqualToString:@”x86_64”])return@”iPhoneSimulator”;

  returnplatform;

}





49、ios长按复制功能




-(void)viewDidLoad

{

  [self.viewaddGestureRecognizer:[[UILongPressGestureRecognizeralloc]initWithTarget:selfaction:@selector(pasteBoard:)]];

}

-(void)pasteBoard:(UILongPressGestureRecognizer)longPress{

  if(longPress.state==UIGestureRecognizerStateBegan){

    UIPasteboardpasteboard=[UIPasteboardgeneralPasteboard];

    pasteboard.string=@”需要复制的文本”;

  }

}




50、ioscocoapods升级




在终端执行sudogeminstall-n/usr/local/bincocoapods–pre




51、ios设置启动页后,依然显示之前的




删除app,手机重启,重新安装




52、ios判断图片类型




//通过图片Data数据第一个字节来获取图片扩展名

-(NSString)contentTypeForImageData:(NSData)data

{

  uint8_tc;

  [datagetBytes:&clength:1];

  switch(c)

  {

    case0xFF:

      return@”jpeg”;




    case0x89:

      return@”png”;




    case0x47:

      return@”gif”;




    case0x49:

    case0x4D:

      return@”tiff”;




    case0x52:

    if([datalength]<12){

      returnnil;

    }




    NSString*testString=[[NSStringalloc]initWithData:[datasubdataWithRange:NSMakeRange(0,12)]encoding:NSASCIIStringEncoding];

    if([testStringhasPrefix:@”RIFF”]

      &&[testStringhasSuffix:@”WEBP”])

    {

      return@”webp”;

    }




    returnnil;

  }




  returnnil;

}




53、ios获取手机和app信息




NSDictionary*infoDictionary=[[NSBundlemainBundle]infoDictionary]; 

 CFShow(infoDictionary); 

//app名称 

 NSString*app_Name=[infoDictionaryobjectForKey:@”CFBundleDisplayName”]; 

 //app版本 

 NSString*app_Version=[infoDictionaryobjectForKey:@”CFBundleShortVersionString”]; 

 //appbuild版本 

 NSString*app_build=[infoDictionaryobjectForKey:@”CFBundleVersion”]; 




  //手机序列号 

  NSStringidentifierNumber=[[UIDevicecurrentDevice]uniqueIdentifier]; 

  NSLog(@”手机序列号:%@”,identifierNumber); 

  //手机别名:用户定义的名称 

  NSString*userPhoneName=[[UIDevicecurrentDevice]name]; 

  NSLog(@”手机别名:%@”,userPhoneName); 

  //设备名称 

  NSString*deviceName=[[UIDevicecurrentDevice]systemName]; 

  NSLog(@”设备名称:%@”,deviceName); 

  //手机系统版本 

  NSString*phoneVersion=[[UIDevicecurrentDevice]systemVersion]; 

  NSLog(@”手机系统版本:%@”,phoneVersion); 

  //手机型号 

  NSString*phoneModel=[[UIDevicecurrentDevice]model]; 

  NSLog(@”手机型号:%@”,phoneModel); 

  //地方型号 (国际化区域名称) 

  NSString*localPhoneModel=[[UIDevicecurrentDevice]localizedModel]; 

  NSLog(@”国际化区域名称:%@”,localPhoneModel); 




  NSDictionaryinfoDictionary=[[NSBundlemainBundle]infoDictionary]; 

  //当前应用名称 

  NSString*appCurName=[infoDictionaryobjectForKey:@”CFBundleDisplayName”]; 

  NSLog(@”当前应用名称:%@”,appCurName); 

  //当前应用软件版本 比如:1.0.1 

  NSString*appCurVersion=[infoDictionaryobjectForKey:@”CFBundleShortVersionString”]; 

  NSLog(@”当前应用软件版本:%@”,appCurVersion); 

  //当前应用版本号码 int类型 

  NSString*appCurVersionNum=[infoDictionaryobjectForKey:@”CFBundleVersion”]; 

  NSLog(@”当前应用版本号码:%@”,appCurVersionNum);




54、ios获取一个类的所有属性




idLenderClass=objc_getClass(“Lender”);

unsignedintoutCount,i;

objc_property_t*properties=class_copyPropertyList(LenderClass,&outCount);

for(i=0;i<outCount;i++){

  objc_property_tproperty=properties[i];

  fprintf(stdout,“%s%sn”,property_getName(property),property_getAttributes(property));

}




55、iosimage圆角




-(UIImage)circleImage

{

  //NO代表透明

  UIGraphicsBeginImageContextWithOptions(self.size,NO,1);

  //获得上下文

  CGContextRefctx=UIGraphicsGetCurrentContext();

  //添加一个圆

  CGRectrect=CGRectMake(0,0,self.size.width,self.size.height);

  //方形变圆形

  CGContextAddEllipseInRect(ctx,rect);

  //裁剪

  CGContextClip(ctx);

  //将图片画上去

  [selfdrawInRect:rect];

  UIImageimage=UIGraphicsGetImageFromCurrentImageContext();

  UIGraphicsEndImageContext();

  returnimage;

}




56、iosimage拉伸




+(UIImage)resizableImage:(NSString)imageName

{

  UIImage*image=[UIImageimageNamed:imageName];

  CGFloatimageW=image.size.width;

  CGFloatimageH=image.size.height;

  return[imageresizableImageWithCapInsets:UIEdgeInsetsMake(imageH0.5,imageW*0.5,imageH*0.5,imageW*0.5)resizingMode:UIImageResizingModeStretch];

}




57、iosJSON字符串转字典




+(NSDictionary)parseJSONStringToNSDictionary:(NSString)JSONString{

  NSDataJSONData=[JSONStringdataUsingEncoding:NSUTF8StringEncoding];

  NSDictionary*responseJSON=[NSJSONSerializationJSONObjectWithData:JSONDataoptions:NSJSONReadingMutableLeaveserror:nil];

  returnresponseJSON;

}




58、身份证号验证




-(BOOL)validateIdentityCard{

  BOOLflag;

  if(self.length<=0){

    flag=NO;

    returnflag;

  }

  NSString*regex2=@”^(d{14}|d{17})(d|[xX])$”;

  NSPredicate*identityCardPredicate=[NSPredicatepredicateWithFormat:@”SELFMATCHES%@”,regex2];

  return[identityCardPredicateevaluateWithObject:self];

}




59、ios获取设备mac地址




+(NSString)macAddress{

  int        mib[6];

  size_t       len;

  char        buf;

  unsignedchar   *ptr;

  structif_msghdr  *ifm;

  structsockaddr_dl *sdl;




  mib[0]=CTL_NET;

  mib[1]=AF_ROUTE;

  mib[2]=0;

  mib[3]=AF_LINK;

  mib[4]=NET_RT_IFLIST;




  if((mib[5]=if_nametoindex(“en0”))==0){

    printf(“Error:if_nametoindexerrorn”);

    returnNULL;

  }




  if(sysctl(mib,6,NULL,&len,NULL,0)<0){

    printf(“Error:sysctl,take1n”);

    returnNULL;

  }




  if((buf=malloc(len))==NULL){

    printf(“Couldnotallocatememory.Rrror!n”);

    returnNULL;

  }




  if(sysctl(mib,6,buf,&len,NULL,0)<0){

    printf(“Error:sysctl,take2”);

    returnNULL;

  }




  ifm=(structif_msghdr)buf;

  sdl=(structsockaddr_dl)(ifm+1);

  ptr=(unsignedchar)LLADDR(sdl);

  NSStringoutstring=[NSStringstringWithFormat:@”%02X:%02X:%02X:%02X:%02X:%02X”,

              *ptr,(ptr+1),(ptr+2),(ptr+3),(ptr+4),(ptr+5)];

  free(buf);




  returnoutstring;

}




60、导入自定义字体库




1、找到你想用的字体的ttf格式,拖入工程

2、在工程的plist中增加一行数组,“Fontsprovidedbyapplication”

3、为这个key添加一个item,value为你刚才导入的ttf文件名

4、直接使用即可:label.font=[UIFontfontWithName:@”你刚才导入的ttf文件名”size:20.0];




61、ios拿到当前正在显示的控制器,不管是push进去的,还是present进去的都能拿到




-(UIViewController)getVisibleViewControllerFrom:(UIViewController)vc{

  if([vcisKindOfClass:[UINavigationControllerclass]]){

    return[selfgetVisibleViewControllerFrom:[((UINavigationController*)vc)visibleViewController]];

  }elseif([vcisKindOfClass:[UITabBarControllerclass]]){

    return[selfgetVisibleViewControllerFrom:[((UITabBarController*)vc)selectedViewController]];

  }else{

    if(vc.presentedViewController){

      return[selfgetVisibleViewControllerFrom:vc.presentedViewController];

    }else{

      returnvc;

    }

  }

}




62、iosruntime为一个类动态添加属性




//动态添加属性的本质是:让对象的某个属性与值产生关联

    objc_setAssociatedObject(self,WZBPlaceholderViewKey,placeholderView,OBJC_ASSOCIATION_RETAIN_NONATOMIC);




63、获取runtime为一个类动态添加的属性




objc_getAssociatedObject(self,WZBPlaceholderViewKey);




64、iosKVO监听某个对象的属性




//添加监听者

[selfaddObserver:selfforKeyPath:propertyoptions:NSKeyValueObservingOptionNewcontext:nil];




//当监听的属性值变化的时候会来到这个方法

-(void)observeValueForKeyPath:(NSString)keyPathofObject:(id)objectchange:(NSDictionary)changecontext:(void*)context{

  if([keyPathisEqualToString:@”property”]){

    [selftextViewTextChange];

    }else{

   }

}

65、iosReachability判断网络状态


NetworkStatusstatus=[[ReachabilityreachabilityForInternetConnection]currentReachabilityStatus];

  if(status==NotReachable){

    NSLog(@”当前设备无网络”);

  }

  if(status==ReachableViaWiFi){

    NSLog(@”当前wifi网络”);

  }

  if(status==ReachableViaWWAN){

    NSLog(@”当前蜂窝移动网络”);

  }





*/

ios 基础知识点总结 (二)

人已赞赏
iOS文章

iOS中的一些关于"Linker"的报错

2020-3-18 11:45:14

iOS文章

Xcode全局断点介绍

2020-3-18 12:19:51

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索