API Reference对__block变量修饰符有如下几处解释: //A powerful feature of blocks is that they can modify variables in the same lexical scope. You signal that a block can modify a variable using the __block storage type modifier. //At function level are __block vari…
API Reference对__block变量修饰符的解释,大概意思: 1.__block对象在block中是可以被修改.重新赋值的. 2.__block对象在block中不会被block强引用一次,从而不会出现循环引用问题. API Reference对__weak变量修饰符的解释,大概意思: 使用了__weak修饰符的对象,作用等同于定义为weak的property.自然不会导致循环引用问题,因为苹果文档已经说的很清楚,当原对象没有任何强引用的时候,弱引用指针也会被设置为nil. 因此,__…
http://www.cocoachina.com/ios/20150106/10850.html 我们知道在Block使用中,Block内部能够读取外部局部变量的值.但我们需要改变这个变量的值时,我们需要给它附加上__block修饰符. __block另外一个比较多的使用场景是,为了避免某些情况下Block循环引用的问题,我们也可以给相应对象加上__block 修饰符. 为什么不使用__block就不能在Block内部修改外部的局部变量? 我们把以下代码通过 clang -rewrite-ob…
iOS中copy和strong修饰符的区别 //用copys修饰的生成的都是不可变的对象 ,如果调用可变类型方法的直接报错 @property(nonatomic,copy)NSString * cpStr; @property(nonatomic,strong)NSString *strongStr; 1.当copy的对象类型为不可变对象如NSString类型时,和Strong修饰作用是一样的 NSString *str = @"wxwx"; self.cpStr = str; se…
java中4种修饰符访问权限的区别及详解全过程 http://jingyan.baidu.com/article/fedf0737700b3335ac8977ca.html java中4中修饰符分别为public.protect.default.private,他们这就说明了面向对象的封装性,所以我们要适用他们尽可能的让权限降到最低,从而安全性提高. 下面详细讲述下它们的访问权限问题.(同一个类中除内部类外所有修饰符都是可以访问的,所以下面排除这种情况.) 首先在这里把它们的访问权限表示出来:…
readonly: 此标记说明属性是只读的,默认的标记是读写,如果你指定了只读,在@implementation中只需要一个读取器.或者如果你使用@synthesize关键字,也是有读取器方法被解析.而且如果你试图使用点操作符为属性赋值,你将得到一个编译错误. readwrite: 此标记说明属性会被当成读写的,这也是默认属性.设置器和读取器都需要在@implementation中实现.如果使用@synthesize关键字,读取器和设置器都会被解析. nonatomic: 非原子性访问,对属性赋…
NSBundle和NSURL的区别: 在项目的工程中添加一个文件,本例程添加的是aa.txt,文件的内容为百度: www.baidu.com,现在要使用NSBundle和NSURL分别去获取内容,代码如下: // 读取文件内容 // 方法1:按照文件路径读取 NSString *pathBundle = [[NSBundle mainBundle]pathForResource:@"aa" ofType:@"txt"]; NSString *outstringbun…
访问权限 类 本包 子类 其他包 public √ √ √ √ protected √ √ √ x default(缺省) √ √ x x private √ x x x…
在基本的开发中遇到 需要弱引用时候 我一般 用 weak  预防 死锁的时候 我会用 block 的确没出过大错  但是这样处理 的确有点囫囵  现在我想好好理解一下这两个修饰符 "block中用到的外部变量最好使用 __weak 修饰,避免内存泄露; block容易引起引用循环的根本原因是: 1,对于(block内部用到的)外部变量,对其执行retain 的时机 与该block的执行时机是不同步的,在block声明的时候就对外部变量进行了retain,而block何时执行甚至是否执行都是不可预…
本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging 技术交流新QQ群:41…
转自:http://www.cnblogs.com/flyFreeZn/p/4264220.html 本文来源于我个人的ARC学习笔记,旨在通过简明扼要的方式总结出iOS开发中ARC(Automatic Reference Counting,自动引用计数)内存管理技术的要点,所以不会涉及全部细节.这篇文章不是一篇标准的ARC使用教程,并假定读者已经对ARC有了一定了解和使用经验.详细的关于ARC的信息请参见苹果的官方文档与网上的其他教程:) 本文的主要内容: ARC的本质 ARC的开启与关闭 A…
本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC). Automatic Reference Counting (ARC) is a compiler-level feature that simplifies the process of managing object lifetimes (memory management)…
1:IOS开发基础知识--碎片1 a:NSString与NSInteger的互换 b:Objective-c中集合里面不能存放基础类型,比如int string float等,只能把它们转化成对象才可以存放,就是类NSNumber c:NSDATA与NSString互转 d:去除输入框空格(NSString也适用) f:IBOutlet,IBAction说明 2:IOS开发基础知识--碎片2  a:获得另一个控件器,并实现跳转 b:判断IOS版本 c:Button不同状态下背景图片 d:判断设备…
一 Block是什么? 我们使用^运算符来声明一个Block变量,而且在声明完一个Block变量后要像声明普通变量一样,后面要加; 声明Block变量 int (^block)(int) = NULL; Block变量的语法 数据返回值类型 (^变量名)(参数列表) = NULL 赋值Block变量 block = ^(int m) { return m * m; }; 使用Block变量 // 通过使用block变量,计算整型常量10的平方,并且打印在控制器输出 NSLog()); 示例代码:…
来自:http://blog.csdn.net/farrellcn/article/details/9096787 ------------------------------------------------------------------------------ 很多书籍中说函数参数如果是String类型的,如果在函数内部不改变参数的值,使用 const 修饰符会加快程序的执行速度,至于如何加快的?有的人说是因为 const 函数保证了参数字符串不会被复制.以前也没有对这个问题深入研究…
以前对访问修饰符总是模棱两可,让自己仔细解释也是经常说不很清楚.这次要彻底的搞清楚. 现在总结如下: 一.概括总结 各个访问修饰符对不同包及其子类,非子类的访问权限 Java访问权限修饰符包含四个:public,protected,friendly,private:但是,friendly在java中并没有显示的声明,成员变量和方法默认情况下就是friendly权限. 现在把它们的访问权限表示出来:(目前展示访问修饰符的方式主要有两种) 表示图一:(第一种展示方式,把不同的类文件分为两个变量,"是…
block下循环引用的问题 __block本身并不能避免循环引用,避免循环引用需要在block内部把__block修饰的obj置为nil __weak可以避免循环引用,但是其会导致外部对象释放了之后,block 内部也访问不到这个对象的问题,我们可以通过在 block 内部声明一个 __strong的变量来指向 weakObj,使外部对象既能在 block 内部保持住,又能避免循环引用的问题 __block与__weak功能上的区别. __block会持有该对象,即使超出了该对象的作用域,该对象…
概述 在iOS内存管理中,为防止循环引用,定义类的内部对象属性使用weak.unsafe_unretained修饰符,不产生强引用. 开发中一般使用的weak修饰符,那么接下来说下weak跟unsafe_unretained的本质区别.这里涉及顺便了解到一些iOS内存管理的本质. weak与unsafe_unretained区别 weak修饰的对象指针,当指向的对象在内存中销毁后,该指针自动赋值为nil.也就是说指针变量保存的地址值为0x0. 对于Objective-C的特性 给nil发送消息不…
今晚随便温习了一下iOS 基础关于修饰符这块的东西,下面简单的来描述一下,其中有的也是在网络学习到的: strong与weak是由ARC新引入的对象变量属性 ARC的解释:ARC引入了新的对象的生命周期限定,即零弱引用.如果零弱引用指向的对象被deallocated的话,零弱引用的对象会被自动设置为nil. 强引用与弱引用的广义区别:强引用也就是我们通常所讲的引用,其存亡直接决定了所指对象的存亡.如果不存在指向一个对象的引用,并且此对象不再显示列表中,则此对象会被从内存中释放.弱引用除了不决定对…
1.Swift中的访问修饰符(三个,作用:用来修饰属性,方法和类) public : 最大权限 -- 可以在当前framework和其他framework中访问 internal : 默认的权限 -- 可以在当前的framework中随意访问 private : 私有权限 -- 只有在当前文件中访问 2.开发中不应该向外界暴露的方法和属性,都要通过private进行修饰. 但是用private修饰监听按钮点击的方法会报错,错误原因以及解决办法如下 错误原因 报错原因是因为监听事件是由运行循环发出…
前面介绍子类继承父类的时候,提到了public(公共)和private(私有)两个修饰符,其中public表示它所修饰的实体是允许外部访问的:而private表示它所修饰的实体不允许外部访问,只能在当前类内部访问private成员,即便是子类也不能访问父类的私有成员.这种情况就令人产生了困惑,私人财产当然不会给外人,可是为啥连儿子都无法动用老子的财物呢?看起来public与private的规则不甚合理,毕竟儿子同外人还是有区别的呀,所谓亲疏有别.一家人不说两家话.为此Java设计了新的修饰符名叫…
在 HAL 库中,很多回调函数前面使用__weak 修饰符,这里我们有必要给大家讲解__weak 修饰符的作用. weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称 这个函数为“弱函数”.加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同 名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数, 那么编译器就会执行__weak 声明的函数,并且编译器不会报错. 这里我给大家举个例子来加深大家的理解.比如我们打开工…
MVC5中Model层开发数据注解   ASP.NET MVC5中Model层开发,使用的数据注解有三个作用: 数据映射(把Model层的类用EntityFramework映射成对应的表) 数据验证(在服务器端和客户端验证数据的有效性) 数据显示(在View层显示相应的数据) 数据注解相关的命名空间如下: System.ComponentModel.DataAnnotations System.ComponentModel.DataAnnotations.Schema System.Web.Mv…
前言 在 HAL 库中,很多回调函数前面使用__weak 修饰符. weak 顾名思义是“弱”的意思,所以如果函数名称前面加上__weak 修饰符,我们一般称这个函数为“弱函数”. 加上了__weak 修饰符的函数,用户可以在用户文件中重新定义一个同名函数,最终编译器编译的时候,会选择用户定义的函数,如果用户没有重新定义这个函数,那么编译器就会执行__weak 声明的函数,并且编译器不会报错. 举个例子 我们打开工程模板,找到并打开文件stm32f4xx_hal.c 文件,里面定义了一个函数 H…
1.关于__weak__weak只能在ARC模式下使用,也只能修饰对象(比如NSString等),不能修饰基本数据类型(比如int等)__weak修饰的对象在block中不可以被重新赋值.__weak只在ARC下使用,可以避免循环引用.__weak修饰对象不会增加引用 __weak __typeof(self) weakSelf = self; self.testBlock = ^{ [weakSelf doSomeThing]; }); 弱引用不会影响对象的释放,但是当对象被释放时,所有指向它…
 一.NS_DESIGNATED_INITIALIZER 用来修饰init方法,被修饰的方法称为designated initializer:没有被这个修饰的init方法称为convenience initializer 参考1对之的说明为 1.A designated initializer must call (via super) a designated initializer of the superclass. Where NSObject is the superclass thi…
重新审视了一下OC在属性修饰符,特意记录一下来.以后不定时更新 > retain:只有在非ARC下才会有效,所有如果在ARC下使用了retain修饰也白搭 如以下的data属性用retain修饰: #import <UIKit/UIKit.h> @interface MyView : UIView @property(nonatomic, retain) NSMUtableArray* data; @end 在对应的setter方法中,会以如下代码实现: if (_data != new…
时不时会有点迷惑属性修饰符retain.strong.copy三者之间的区别,还是把测试过程记录下来好一点! 1.属性修饰符结论 2.给retain.strong.copy修饰的字符串属性赋值指针变化测试例子 3.字符串调用copy.mutableCopy方法给字符串赋值指针变化例子 一.属性修饰符retain.strong.copy修饰字符串测试 先看代码,创建一个Person类,定义属性 #import <Foundation/Foundation.h> @interface Person…
修饰符“static”对该项无效, 修饰符“internal”对该项无效. 该异常弹出的位置为Config.Designer.CS文件中相关插件的声明附近 internal static string Water_Info_Toolbar.AttributeBrushTool.AttributeBrushTool { get { return "llc3s@foxmail.com_Water_Info_Toolbar_AttributeBrushTool"; } } 类似的语句中,存在…
延时加载或者说延时初始化是很常用的优化方法,在构建和生成新的对象的时候,内存分配会在运行时耗费不少时间,如果有一些对象的属性和内容非常复杂的话,这个时间更是不可忽略.另外,有些情况下我们并不会立即用到一个对象的所有属性,而默认情况下初始化时,那些在特定环境下不被使用的存储属性,也一样要被初始化和赋值,也是一种浪费. 在其他语言 (包括 Objective-C) 中延时加载的情况是很常见的.我们在第一次访问某个属性时,判断这个属性背后的存储是否已经存在,如果存在则直接返回,如果不存在则说明是首次访…