我猜我只会使用UIKIT_EXTERN,如果我的项目中有可能使用该变量的C++代码.
如果是这种情况,用UIKIT_EXTERN声明所有外部可用的常量是否安全?
为什么我不再看到这个?
我是C/C++的新手,我一直在讨厌,但仍然不知道如何制作这样的"结构"

它应该是一个使用指针的3D动态数组.
我这样开始,但卡在那里
int x=5,y=4,z=3;
int ***sec=new int **[x];
Run Code Online (Sandbox Code Playgroud)
知道如何使其成为y和z的静态大小就足够了;
拜托,我很感激你的帮助.
提前致谢.
autorelease用于返回的函数对象,因此调用者不会获得所有权,被调用者将来会释放该对象.
但是,ARC能够计算调用者的所有权并在使用后释放它,也就是说,它可以像C++中的智能指针一样行为.使用ARC,它可以摆脱自动释放,因为自动释放是非确定性的.
我问这个问题的原因是我确实看到返回的对象在ARC中比非ARC代码更早地调用dealloc.这让我认为ARC可以像Smart Pointer一样,并且可以使autorelease无用.这是真的还是可能的?我唯一可以考虑自动释放有用的是多线程或网络代码,因为在对象传递时计算所有权可能并不容易.
谢谢你的想法.
这是一个新的编辑,使事情清楚:
与自动释放
+ (MyClass*) myClass
{
return [[[MyCClass alloc] init] autorelease];
}
- doSomething
{
MyClass *obj = [MyClass myClass];
}
Run Code Online (Sandbox Code Playgroud)
使用ARC:
+ (MyClass*) myClass
{
return [[MyCClass alloc] init]; // no autorelease
}
- doSomething
{
MyClass *obj = [MyClass myClass];
// insert [obj release]
}
Run Code Online (Sandbox Code Playgroud)
所以,我们真的不需要自动释放.
memory-management reference-counting objective-c ios automatic-ref-counting
iOS/Objective-C:我有一大堆布尔值.
这是存储这些值的低效方法 - 当只需要一个时,每个元素至少使用8位.
我该如何优化?
给定一个Cocoa NSLocking对象(比如一个NSLock)和一些在执行锁定时要执行的非平凡代码:
为了确保始终释放锁定,是否应始终使用以下习惯用法?
NSLock *mutex = // get lock from somewhere
@try {
[mutex lock];
// do non-trivial stuff
}
@finally {
[mutex unlock];
}
Run Code Online (Sandbox Code Playgroud)
这似乎是谨慎的(在Java中很常见),但我没有看到任何Cocoa代码这样做.
应该使用这个成语吗?为什么或者为什么不?
我来自C++/Java世界,很明显如何创建私有成员.但是,我在Objective C中看到了几种方法,我想听听cons和pros
1)在.h文件中将它们声明为@private
@interface MyClass : NSObject
{
@private
int someMember;
}
@end
Run Code Online (Sandbox Code Playgroud)
2)在.m文件中的接口中声明它们
@interface MyClass() {
int someMember;
}
@end
@implementation MyClass
@end
Run Code Online (Sandbox Code Playgroud)
3)在实施中声明它们
@implementation MyClass {
int someMember;
}
@end
Run Code Online (Sandbox Code Playgroud)
什么是首选方法,为什么?我错过了其他方法吗?
以下面的例子为例:
- (NSString *)pcen NS_RETURNS_RETAINED {
return (__bridge_transfer NSString *)CFURLCreateStringByAddingPercentEscapes(NULL, (__bridge CFStringRef) self, NULL, (CFStringRef) @"!*'();:@&=+$,/?%#[]", kCFStringEncodingUTF8);
}
Run Code Online (Sandbox Code Playgroud)
把它放在NS_RETURNS_RETAINED那里是正确的吗?
另一个例子:
+ (UIImage *)resizeImage:(UIImage *)img toSize:(CGSize)size NS_RETURNS_RETAINED {
UIGraphicsBeginImageContextWithOptions(size, NO, 0.0);
[img drawInRect:...];
UIImage *resizedImage = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return resizedImage;
}
Run Code Online (Sandbox Code Playgroud)
这似乎更复杂,因为返回的UIImage是"Get"方法的结果.然而,它所获得的图形上下文是在方法的范围内创建的,所以它NS_RETURNS_RETAINED在这里也是正确的吗?
第三个例子:
@property (readonly) NSArray *places;
---
@synthesize places=_places;
---
- (NSArray *)places {
if (_places)
return _places;
return [[NSArray alloc] initWithObjects:@"Unknown", nil];
}
Run Code Online (Sandbox Code Playgroud)
不知道该怎么做,因为返回的对象可以是新创建的.
还有最后一个问题; NS_RETURNS_RETAINED如果返回的对象是自动释放方法的结果,则可能不需要.所以说最后一个例子的回报被修改为
return [NSArray arrayWithObject:@"Unknown"];
什么是最佳实践呢?
memory-management reference-counting objective-c ios automatic-ref-counting
两个月前我开始编写一个新的iPhone应用程序,因此我创建了一个通用的RESTFul Web服务,它允许我拥有许多这些必要的功能,如用户身份验证,用户配置文件,友谊系统,媒体处理,消息传递系统等.在我看来,有几个用例可以将这个web服务重用于未来的iPhone应用程序.
有了这种心态,我决定为这个应用程序(以及所有未来的应用程序)编写一个静态库,处理所有繁重的工作,如媒体(图像,视频,声音)设置和处理,与Web服务通信,解析和映射的结果,处理CoreData等.
鉴于我的应用程序,有许多并行任务正在运行的情况(最坏的情况),例如用户当前更改他/她的个人资料图片,而应用程序将用户位置发送到服务器(在后台),并且新的推送通知是接收.
因此决定在NSOperation中封装每个逻辑操作(如SendUserLocation或GetCurrentFriendList)并将它们添加到serviceQueue(NSOperationQueue).
当操作成功从Web服务获得结果并且现在应该处理它时,每个操作都能够生成子任务.

典型的ServiceManager方法如下所示
- (void)activateFriendsSync:(id)observer onSuccess:(SEL)selector {
ELOSyncFriends *opSyncFriends = [[ELOSyncFriends alloc] initWithSM:self];
[self ELServiceLogger:opSyncFriends];
[serviceQueue addOperation:opSyncFriends];
if(observer) {
[self registerObserver:observer selector:selector name:opSyncFriends.notificationName];
}
}
Run Code Online (Sandbox Code Playgroud)
每个操作,请求(到服务器)和subTask都使用GUID作为notificationName,以在完成处理时通知父对象.如果操作中的所有内容都已完成,它会将通知发送回用户界面.
也就是说,添加和删除子任务的代码看起来像这样
- (void)removeSubTask:(NSNotification*)notification {
ELRequest *request = (ELRequest*)[notification object];
[subTasks removeObjectIdenticalTo:request.notificationName];
if([subTasks count] == 0) {
// all SubTaks done, send notification to parent
[serviceManager.notificationCenter postNotificationName:self.notificationName object:request];
}
}
- (NSString*)addSubTask {
NSString* newName = [self GetUUID];
[subTasks addObject:[newName retain]];
[serviceManager.notificationCenter addObserver:self selector:@selector(removeSubTask:) name:newName object:nil];
return newName;
}
- (NSString …Run Code Online (Sandbox Code Playgroud) architecture iphone objective-c nsoperation nsoperationqueue
我的iPhone应用程序已准备好投入生产,我们希望尽可能多地填充数据.当我在为我的应用程序生成.app文件时,我看到一个名为<executable name>的文件,我假设它是已编译的代码.这大约是2.5兆美元,对于我在我的应用程序中包含的内容而言似乎很大.我应该检查什么类型的东西,以确保我的可执行文件中没有包含任何不需要的项目?
我希望用户选择她/他的iPhone中存在的任何文件,以便将其用作电子邮件附件.为此,我想显示iPhone中存在的所有文件和文件夹的列表.但是我如何获得这些文件的列表?有没有办法获得该名单?
objective-c ×8
ios ×4
iphone ×3
architecture ×1
arrays ×1
bitarray ×1
c ×1
c++ ×1
cocoa ×1
cocoa-touch ×1
code-size ×1
declaration ×1
extern ×1
filesystems ×1
foundation ×1
locking ×1
nsoperation ×1
optimization ×1
pointers ×1
visibility ×1
xcode ×1