我觉得当我使用NSArray时,我可能会在将来的某个时候限制自己.是否有任何充分的理由选择这种"原始"而不是"复杂"的,这是可变的?
我想知道自动释放池是否包含对它所拥有的对象的强或弱引用.我猜它们很弱.当我将一个对象添加到自动释放池时,它不会立即释放,但会在池耗尽时释放,对吧?所以引用应该是弱的,即当我将对象添加到自动释放池时,引用计数(或保留计数)保持不变?
如果我定义一个属性,只需:
@property(nonatomic) UIButton* button;
Run Code Online (Sandbox Code Playgroud)
然后我认为这是一个"分配"属性.那是对的吗?
这对我来说还不是很清楚.例:
NSArray*arr = [[NSMutableArray alloc] init];
我的意思是......是的,它有效.但是:为什么我可以告诉编译器"嘿,我的var只是一个NSArray,你只需要保留空间以便它适合那里"然后,实际上,有一个大的,胖的NSMutableArray进入那个有道路的地方更多的方法,更多的实例变量,只需要更多的空间.我的意思是......这怎么可能?
我会理解另一种方式:左侧是大胖子NSMutableArray,右侧是小型NSArray.根据我的理解,超类总是比子类更小,更复杂.子类可能会覆盖一些东西,但它也可能会添加一些东西.对?
想象一下,你买了一个车库,因为你的妻子通过电话告诉你,她买了一些可以开车的东西.然后,它不仅仅是你想象的小型车.她买了一辆大卡车.它不适合那里.
那么我该如何思考这个问题呢?;)
这适用于社区维基,只是因为其他人也感到困惑.
我问他们每秒50Hz/50次数据.当我突然将设备在x轴上翻转90度而设备在显示器朝上的桌子上是平的时,这些值会非常缓慢地移动到该位置的"目标"值.
现在奇怪的是:如果我提高测量速率,在突然将设备翻转90度时,该值将更快地移动到该新值.但是,如果我每秒只询问一次新值,则需要很长时间才能达到目标值.这可能是什么原因?
我没有做任何类型的数据聚合,也没有积累任何东西.我只是做一些简单的过滤来摆脱噪音.我的方法看起来像这样:
- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration {
// Use a basic low-pass filter to only keep the gravity in the accelerometer values for the X and Y axes
// accelerationX is an instance variable
accelerationX = acceleration.x * 0.05 + accelerationX * (1.0 - 0.05);
// round
int i = accelerationX * 100;
float clippedAccelerationValue = i;
clippedAccelerationValue /= 100;
[self moveViews:clippedAccelerationValue];
}
Run Code Online (Sandbox Code Playgroud)
稍后,在我的-moveViews:方法中,我这样做:
-(IBAction)moveSceneForPseudo3D:(float)accelerationValue {
if(fabs(lastAccelerationValue - accelerationValue) > 0.02) { // some little treshold to prevent …Run Code Online (Sandbox Code Playgroud) 我认为这是框架的oringin决定了视图的位置.但是当我像这样改变中心属性时
myView.center = CGPointMake(myView.center.x - 20, myView.center.y);
Run Code Online (Sandbox Code Playgroud)
我的观点将向左移动20个单位.我想改变中心点以相对于该点进行一些旋转.
我写了一个做一些图形计算的方法.在那里,你可以指定一个起始方向,如"从左边","从右边","从底部","从顶部".
现在我不希望我的方法的用户传递混乱的值,如1,2,3或4甚至字符串.没有那样的事.相反,我想创建常量,如:
kFromLeft,kFromRight,kFromTop,kFromBottom
我在Apple头文件中看到过这个:
enum CGImageAlphaInfo {
kCGImageAlphaNone,
kCGImageAlphaPremultipliedLast,
kCGImageAlphaPremultipliedFirst,
kCGImageAlphaLast,
kCGImageAlphaFirst,
kCGImageAlphaNoneSkipLast,
kCGImageAlphaNoneSkipFirst,
kCGImageAlphaOnly
};
typedef enum CGImageAlphaInfo CGImageAlphaInfo;
Run Code Online (Sandbox Code Playgroud)
我不明白的五件事/我不清楚:
1)为什么有一个分号将定义与typedef分开?
2)为什么他们像parot一样重复CGImageAlphaInfo?
3)如果我在我的头文件中放入这样的东西,我会在我的方法中说参数的类型是CGImageAlphaInfo(当然我会有不同的名字),对吧?
4)我通常会以这样的方式指定这些常量的值?(例):
#define kCGImageAlphaNone 100
#define kCGImageAlphaPremultipliedLast 300
#define kCGImageAlphaPremultipliedFirst 900
Run Code Online (Sandbox Code Playgroud)
5)我是否需要将这些常量设置为这样的愚蠢值?或者我可以在我的方法中检查哪个常量传入,比如
if(paramConst == kCGImageAlphaNone) {...}
Run Code Online (Sandbox Code Playgroud)
?
我不明白这个:
+ (void)beginAnimations:(NSString *)animationID context:(void *)context
Run Code Online (Sandbox Code Playgroud)
(void*)---->我可以在这提供什么样的数据?
我试过这个,但这不起作用:
CATransform3D currentTransform = self.layer.transform;
CATransform3D identityTransform = CATransform3DIdentity;
if (currentTransform == identityTransform)
NSLog(@"the same");
Run Code Online (Sandbox Code Playgroud)
我真的很想比较矩阵中的每个单个字段;)我可以将这种情况作为一个整体的大事进行比较,还是我必须提取每个值进行比较?
我想为所有很酷的函数创建一个大文件,我发现它在某种程度上是可重用和有用的,并将它们全部放入该单个文件中.嗯,一开始我没有很多,所以我猜想制作几个文件并不值得考虑.我会使用pragma标记来直观地分隔它们.
但问题是:那些未使用的方法会不会受到任何影响?我的应用程序会爆炸还是性能较差?或者编译器/链接器是否足够聪明,知道不需要函数A和B,因此不会将其"代码"复制到我生成的应用程序中?
iphone ×8
cocoa-touch ×7
uikit ×4
objective-c ×3
autorelease ×1
c ×1
cocoa ×1
collections ×1
properties ×1