![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
IOS
Ansel_m
阿里天猫
展开
-
runtime深入解析
1.前言OC是一门动态性比较强的编程语言,允许很多操作推迟到程序运行时再进行, 而OC的动态性是由Runtime来支撑和实现的,Runtime是一套C语言的API,封装了很多动态性相关的函数,平时编写的OC代码,底层都是转换成了Runtime API进行调用。2. 基础知识2.1 Class2.2 Meta Calss2.3 Ivar2.4 Property2.5 Method2.6 Category /关联2.7 super2.三个阶段2.1.消息发送2.2.动态方法解析2原创 2022-03-28 21:45:09 · 1035 阅读 · 0 评论 -
简单获取class的方式
- (void)initMainBundleClasses { NSMutableArray<NSString *> *mainBundleClasses = @[].mutableCopy; unsigned int classCount = 0; const char** classNames = objc_copyClassNamesForImage([[NSBundle mainBundle] executablePath].UTF8String, &...原创 2021-04-15 13:18:25 · 174 阅读 · 1 评论 -
CATransformLayer使用
//red layer CALayer *redLayer = [CALayer layer]; redLayer.frame = (CGRect){CGPointZero, CGSizeMake(200, 200)}; redLayer.position = CGPointMake(200, 300); redLayer.backgroundColor = [UIColor redColor].CGColor; //Z轴平移 CATran...原创 2020-08-11 20:24:27 · 209 阅读 · 0 评论 -
遮罩实现镂空
[self.view setBackgroundColor:[UIColor redColor]]; UIView *guideView = [[UIView alloc] initWithFrame:[UIScreen mainScreen].bounds]; guideView.backgroundColor = [UIColor blackColor]; guideView.alpha = 0.6; UIBezierPat...原创 2020-08-07 14:23:02 · 230 阅读 · 0 评论 -
地址变更
Significant Location Update当请求地理位置权限时,可以请求“后台定位”的权限,当有后台定位权限时,应用可以调用 CLLocationManager的startMonitoringSignificantLocationChanges方法启用“显著位置变化的监听”,当GPS位置有明显变化时(实际测试一般4、5百米),应用会在后台启动。首先,需要CLLocationMa...原创 2020-04-25 15:39:18 · 58111 阅读 · 0 评论 -
获取线程堆栈剩余大小
#import <pthread.h>pthread_t currentThread = pthread_self();uint8_t *endStack = pthread_get_stackaddr_np(currentThread);size_t totalStackSize = pthread_get_stacksize_np(currentThread);u...原创 2020-04-04 00:41:51 · 1572 阅读 · 0 评论 -
isa superclass的总结
如下图原创 2020-03-03 19:52:59 · 140 阅读 · 0 评论 -
isa的地址
struct NSObject_IMPL { void *isa;};NSObject *object = [[NSObject alloc] init];struct NSObject_IMPL *obj = (__bridge struct NSObject_IMPL *)object;NSLog(@"%p, %p", &obj->isa, object...原创 2020-02-25 22:31:57 · 258 阅读 · 0 评论 -
详解如何调试Xcode程序
详解如何调试Xcode程序详解如何调试Xcode程序是本文要介绍的内容,不多说,我们直接进入话题,解决长须调试有两种方法:一是暴力调试,二是使用调试器调试。什么是暴力调试?暴力调试就是在你的程序中添加NSLog()语言,将程序的控制流程和一些重要数据输出到终端上。调试器调试:调试器 就是介于你编写的应用程序和操作系统之间的一种程序,可转载 2013-01-30 17:37:05 · 817 阅读 · 0 评论 -
在xcode中提供文件路径
1、在xcode文件列表中转开Exccutables,并双击程序名2、单击Arguments, 在Arguments区域下的加号,并输入启动参数,如 ./word.txt原创 2013-02-01 10:28:26 · 722 阅读 · 0 评论 -
正确比较字符串
比较两个字符串是否相等时,应该用isEqualToString:,而不能仅仅只是比较字符串的指针值,例如:NSString str1 =@“hello”;NSString str2 = @"world"; if( [str1 isEqualToString: str2] ){NSLog(@"The strings are the same!");}和if(str1 =原创 2013-02-01 15:30:35 · 460 阅读 · 0 评论 -
遍历NSArray数组的方法
NSArray *array = [NSArray WithObjects:@"one",@"two",nil];1、索引for(int i=0;iNSLOG(@"index %d has %@ .", i, [array objectAtindex i]);}2、枚举“王国”NSEnumerator *enumerator = [array objectEnumerat原创 2013-02-01 16:22:38 · 582 阅读 · 0 评论 -
objective-c 装箱和拆箱
NSNumber:1、装箱+ (NSNumber*) numberWitChar: (char) value;+ (NSNumber*) numberWithInt: (char) value;+ (NSNumber*) numberWithFloat: (float) value;+ (NSNumber*) numberWithBool: (BOOL) value;原创 2013-02-01 16:54:43 · 1915 阅读 · 0 评论 -
ios正式协议
协议声明类需要实现的的方法,为不同的类提供公用方法,一个类可以有多个协议,但只能有一个父类,即单继承。它类似java中的接口。正式协议(formal protocol)------------------------------------------------------------------------------------声明正式协议使用@protocol指令,以@en转载 2013-02-02 11:23:50 · 782 阅读 · 0 评论 -
NSValue包装对象指针,CGRect结构体等
@interface NSValue (NSValueUIGeometryExtensions) + (NSValue *)valueWithPointer:(const void *)pointer;//保存对象指针 + (NSValue *)valueWithCGPoint:(CGPoint)point;//保存CGPoint结构体 + (NSValue转载 2013-02-01 17:48:51 · 1275 阅读 · 0 评论 -
Objective-C 属性特性(assign , retain , copy , readonly , readwrite , atomic , nonatomic)
assign:指定setter方法用简单的赋值,这是默认操作。你可以对标量类型(如int)使用这个属性。你可以想象一个float,它不是一个对象,所以它不能retain、copy。retain:指定retain应该在后面的对象上调用,前一个值发送一条release消息。你可以想象一个NSString实例,它是一个对象,而且你可能想要retain它。copy:指定应该使用对象的副本(转载 2013-02-01 19:54:10 · 512 阅读 · 0 评论 -
ios开发之浅拷贝与深拷贝
在iphone程序中,属性合成中的retain/copy/assign有什么区别? 1)assign就不用说了,因为基本上是为简单数据类型准备的,原子类类型,例如CGPoint、CGFloat等,而不是NS对象们;2)retain VS copycopy: 建立一个索引计数为1的对象,然后释放旧对象retain:释放旧的对象,将旧对象的值赋予输入对象,再提高输入对象的索引计数为转载 2013-02-02 11:53:09 · 752 阅读 · 0 评论 -
常见的NSArray和NSMutableArray方法
常见的NSArray和NSMutableArray方法 NSArray方法:+ (id)arrayWithObjects:(id)firstObj, …nil创建一个新数组, 逗号隔开,nil结尾.- (BOOL)containsObject:(id)anObject确定数组中是否包含对象anObject(是用isEqual方法)转载 2013-02-01 16:03:19 · 641 阅读 · 0 评论 -
Objective-C语法之NSDictionary和NSMutableDictionary
Java有Map,可以把数据以键值对的形式储存起来,取值的时候通过key就可以直接拿到对应的值,方便快捷。在Objective-C语言中,词典就是做这样的事情的,和NSArray一样,一个词典对象也能保存不同类型的值,词典也分别有不可变词典和可变的词典(NSDictionary与NSMutableDictionary),前者是线程安全的,后者不是 。1、不可变词典NSDicti转载 2013-02-01 16:38:23 · 544 阅读 · 0 评论 -
ios set方法的注意事项
在set方法中,你必须考虑到的是:新的值可能随时被dealloc。因此你必须通过发送retain 消息来取得对新值的所有权,进而保证dealloc 不会发生。你还必须对旧值发送release 消息。在Objective-c 中,对一个nil 发送消息是没问题。因此就算_count还没有旧值,也不会出错。你必须在[newCount retain]之后再(对旧值)发送release,因为你不想因为意外原创 2013-02-04 10:51:32 · 4458 阅读 · 0 评论 -
ios dealloc函数的要点
1、你永远不需要直接调用另一个对象的dealloc方法。2、你必须在末尾调用super类的实现方法。3、你不可以把系统的资源和对象的生命周期进行绑定。请参看 Don’t Use Dealloc To ManageScarce Resources。 (译者:就是说你不能等对象被dealloc 时才放弃对关键系统资源的独占。原因见下一段。) 因为进程的内存会在退出时自动原创 2013-02-04 10:43:36 · 776 阅读 · 0 评论 -
ios内存管理对象图
原创 2013-02-04 10:25:37 · 601 阅读 · 0 评论 -
IOS面试题详解
IOS面试题详解(一)..这套题目来自cocoachina的yoyokko版主大大招人时候的题目,论坛各路大神都觉得偏难。自己看了一下,发现很多是自己知道,但又说不上来的感觉。所以觉得有必要梳理完善一下,题很多,反正写到哪算哪吧!另外,因为我不是C/C++ 或写 mac “发家” 所以还是有解答不上来的,但是关于IOS方面,一定尽量解答,如果回答得有不尽入人意的地方,欢迎高手纠转载 2013-02-16 21:34:31 · 1027 阅读 · 0 评论 -
iOS面试题汇总(一)
1.Difference between shallow copy and deep copy? 浅复制和深复制的区别? 答案:浅层复制:只复制指向对象的指针,而不复制引用对象本身。 深层复制:复制引用对象本身。 意思就是说我有个A对象,复制一份后得到A_copy对象后,对于浅复制来说,A和A_copy指向的是同一个内存资源,复制的只不过是是一个指针,对象本身资源 还是只有一份,那如果我们对A转载 2013-02-16 21:43:01 · 1783 阅读 · 0 评论 -
ios之旋转式移动按钮
在.m 打开1、shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation并修改- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {原创 2013-02-19 11:34:58 · 1759 阅读 · 0 评论 -
MVC设计模式详解
MVC(Model View Controller)模型(model)-视图(view)-控制器(controller):MVC本来是存在于Desktop程序中的,M是指数据模型(保存应用程序的类),V是指用户界面(窗口、控件和其他用户可以看到并能与之交互的元素),C则是控制器(将模型与视图绑定到一起,确定何如处理用户输入的应用程序逻辑)。使用MVC是将M和V的实现代码分离,从而使同一个程序可转载 2013-02-18 10:21:30 · 640 阅读 · 0 评论 -
iPhone完成输入后关闭键盘的方法
iPhone的键盘是基于软件,而不是物理键盘的,因此需要一些额外的步骤来确保用户在完成输入后关闭键盘。1.通过点击Return/Done按钮关闭键盘当用户按下Return按钮时,将触发“did end on exit”事件,此时我们需要让文本字段取消控件,以关闭键盘。在控制器类头文件中加入一个操作方法-(IBAction)textFieldDoneEditing:(id)sende转载 2013-02-18 17:32:29 · 4632 阅读 · 0 评论 -
获取滑块的值
- (IBAction) sliderChanged:(id)sender{UISlider *slider = (UISlider*)sender;int progressAsInt = (int)(slider.value + 0.5);NSString *newText = [[NSString alloc] initWithFormat:@"%d", progressAsI原创 2013-02-19 09:19:43 · 1272 阅读 · 0 评论 -
ios之分段控件和开关
分段控件(UISegmentControl)分段开关的第一个索引为0,此后一次增加。-(IBAction) toggleControls:(id)sender{switch ([sneder selectedSegmentIndex]){case 0: NSSlog(@"0");break;....default:break;}}单击分段控件,在连原创 2013-02-19 10:16:38 · 1040 阅读 · 0 评论 -
ios之操作表和报警
.h@interface Control_FunViewController : UIViewController { UITextField *nameField;.....}- (IBAction)buttonPressed;......@end.m- (IBAction)buttonPressed { UIActionSh原创 2013-02-19 10:30:48 · 523 阅读 · 0 评论 -
ios之美化按钮
.h@interface Control_FunViewController : UIViewController {.... UIButton *doSomethingButton;}@property (nonatomic, retain) IBOutlet UIButton *doSomethingButton;@end.m@s原创 2013-02-19 10:56:01 · 494 阅读 · 0 评论 -
ios之多视图应用程序源码
BlueViewController的.h文件#import @interface BlueViewController : UIViewController {}-(IBAction)blueButtonPressed:(id)sender;@endBlueViewController的.m文件import "BlueViewControlle原创 2013-02-19 17:07:38 · 521 阅读 · 0 评论 -
IOS之制作动画
[UIView beginAnimations:@"View Flip" context:nil]; //第一个参数是动画块标题,第二个参数是(void*),它支持指定你希望将其指针与此动画块关联的对象(或任何其他c数据类型)。 [UIView setAnimationDuration:1.25]; [UIView setAnimationCurve:UIViewAnimati原创 2013-02-19 17:13:49 · 403 阅读 · 0 评论 -
ios之加速计
ios使用加速计处理自动旋转,它还可以可于检测摇动和其他突发运动。用UIDevice对象实现。访问UIDevice信息的方法:1)、通过orientation 2)、通过通知访问1、检测摇动的方法- (void)motionBegan:(NSSet *)touches withEvent:(UIEvent *)event;- (void)moti原创 2013-02-27 10:18:52 · 630 阅读 · 0 评论 -
ios之在view中添加视图对象
1、拖动一个图像视图(Image View)到View窗口上。2、在nib的主窗口中,可以看到3个标签为View Mode的按钮。单击中间的按钮,可以得到nib的分层视图,你可以展开其中的子视图。3、选中视图对象之后,按command+1调出检查器。4、设置视图对象的Image属性即可。原创 2013-02-18 16:37:48 · 465 阅读 · 0 评论 -
ios之旋转时视图切换
源码如下:.h文件#import #define degreesToRadian(x) (M_PI * (x) / 180.0)@interface SwapViewController : UIViewController { UIView *landscape; UIView *portrait; // Foo U原创 2013-02-19 15:22:12 · 2553 阅读 · 0 评论 -
ios之Core Location定位功能
1、需要遵循CLLocationManagerDelegate协议,该协议有两个方法- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;//当位置原创 2013-02-26 12:59:50 · 524 阅读 · 0 评论 -
ios之深拷贝
.h文件#import @interface NSDictionary(DeepMutableCopy)-(NSMutableDictionary *)mutableDeepCopy;@end.m文件#import "NSDictionary-DeepMutableCopy.h"@implementation NSDictionary(DeepMutableCo原创 2013-02-21 09:29:43 · 442 阅读 · 0 评论 -
ios之表视图
表视图基础:表视图是显示表数据的视图对象,它是UITableView类的一个实例。表中的每个可见行都由UITableViewCell类实现。表视图遵从UITableViewDataSource协议和UITableViewDelegate协议。UITableViewCell可以添加视图:方法如下:1、在创建单元是添加子视图2、从nib文件中加载它们。表视图有两种基本样式:原创 2013-02-20 17:46:41 · 581 阅读 · 0 评论 -
ios之创建声音
1、添加头文件#import 2、添加框架将AudioToolbox.Framework添加到Frameworks中3、代码如下 NSString *path = [[NSBundle mainBundle] pathForResource:@"crunch"原创 2013-02-20 16:27:18 · 535 阅读 · 0 评论